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

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

csc_matrix
csr_matrix
dok_matrix
coo_matrix
lil_matrix
dia_matrix
bsr_matrixeyeissparseSparseEfficiencyWarning)supported_dtypesisscalarlikeget_index_dtypeasmatrixmatrix)spluexpminv)	decoratorzgoogle.colabc                 C   s*   t | |v |d ur
|n| d|d d S )Nz not found in )msg)r   )member
collectionr,    r/   W/var/www/html/scripts/venv/lib/python3.10/site-packages/scipy/sparse/tests/test_base.py	assert_in1   s   *r1   c                 K   s&   t | j|jk t| |fi | d S N)r   dtyper   )xykwargsr/   r/   r0   assert_array_equal_dtype5   s   r7   dokc                 C   s<   dd }|| D ]}||D ]}t ||r  dS qqdS )Nc                 S   s4   g }| j  D ]}t|tjtjfr|| q|S r2   )__dict__values
isinstancenpr	   genericappend)r4   arraysar/   r/   r0   _underlying_arrays?   s   
z3sparse_may_share_memory.<locals>._underlying_arraysTF)r<   may_share_memory)ABrA   r@   br/   r/   r0   sparse_may_share_memory<   s   
rF   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
   r/   Fc                 S   sD   t | ||}tt|jttjj t|tjkp|tjk |S r2   )r%   r   r<   iinfomaxint32r   intc)r?   maxvalcheck_contentstpr/   r/   r0   new_get_index_dtypec   s   z4with_64bit_maxval_limit.<locals>.new_get_index_dtypec                    s    S r2   r/   r?   rL   rM   fixed_dtyper/   r0   rO   i        )seedc                    s   t jt jf d S )N   )r<   rJ   int64randintrP   )counterr/   r0   rO   n   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   )
r<   rJ   rW   r   r3   size
issubdtypeintegerrI   min)r?   rL   rM   r3   arrminvalmaxval_limitr/   r0   rO   q   s$   

c                    s    |    kr
td| tjS )Nzdowncast limited)rI   AssertionErrorastyper<   intp)r_   )downcast_maxvalr/   r0   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%   downcast_intp_index)scipysparse_bsr_coo_csc_csr_dia_dok_lil_sputils_compressed
_constructr>   getattrsetattr)funcr@   kwbackupmodulesmodnameoldfunc)rf   rg   rO   r/   r0   deco   s8   

z%with_64bit_maxval_limit.<locals>.deco)r/   NF)r<   rW   randomRandomStater+   )rb   r   rR   rf   assert_32bitr~   r/   )rY   rf   rR   rb   rg   rO   r0   with_64bit_maxval_limitT   s    
r   c                 C   s    t | tjs
t| r| S |  S r2   )r;   r<   r	   r$   toarrayr@   r/   r/   r0   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 rightr/   selfmatr/   r/   r0   __add__   rS   zBinopTester.__add__c                 C   r   r   r/   r   r/   r/   r0   __mul__   rS   zBinopTester.__mul__c                 C   r   r   r/   r   r/   r/   r0   __sub__   rS   zBinopTester.__sub__c                 C   r   Nmatrix on the leftr/   r   r/   r/   r0   __radd__   rS   zBinopTester.__radd__c                 C   r   r   r/   r   r/   r/   r0   __rmul__   rS   zBinopTester.__rmul__c                 C   r   r   r/   r   r/   r/   r0   __rsub__   rS   zBinopTester.__rsub__c                 C   r   r   r/   r   r/   r/   r0   
__matmul__   rS   zBinopTester.__matmul__c                 C   r   r   r/   r   r/   r/   r0   __rmatmul__   rS   zBinopTester.__rmatmul__N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r/   r/   r/   r0   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   s
   || _ d S r2   _shape)r   shaper/   r/   r0   __init__      
zBinopTester_with_shape.__init__c                 C   s   | j S r2   r   r   r/   r/   r0   r      s   zBinopTester_with_shape.shapec                 C   s
   t | jS r2   )lenr   r   r/   r/   r0   ndim   r   zBinopTester_with_shape.ndimc                 C   r   r   r/   r   r/   r/   r0   r      rS   zBinopTester_with_shape.__add__c                 C   r   r   r/   r   r/   r/   r0   r      rS   zBinopTester_with_shape.__mul__c                 C   r   r   r/   r   r/   r/   r0   r      rS   zBinopTester_with_shape.__sub__c                 C   r   r   r/   r   r/   r/   r0   r      rS   zBinopTester_with_shape.__radd__c                 C   r   r   r/   r   r/   r/   r0   r      rS   zBinopTester_with_shape.__rmul__c                 C   r   r   r/   r   r/   r/   r0   r      rS   zBinopTester_with_shape.__rsub__c                 C   r   r   r/   r   r/   r/   r0   r      rS   z!BinopTester_with_shape.__matmul__c                 C   r   r   r/   r   r/   r/   r0   r      rS   z"BinopTester_with_shape.__rmatmul__N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r/   r/   r0   r      s    r   c                   @   s  e Zd ZdZeZedd Zdd Zdd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zej j!d2d3 Z"d4d5 Z#d6d7 Z$d8d9 Z%d:d; Z&d<d= Z'd>d? Z(d@dA Z)dBdC Z*dDdE Z+dFdG Z,dHdI Z-dJdK Z.dLdM Z/dNdO Z0dPdQ Z1dRdS Z2dTdU Z3e4dVdW Z5e4dXdY Z6e4dZd[ Z7e4d\d] Z8d^d_ Z9d`da Z:e4dbdc Z;e4ddde Z<dfdg Z=dhdi Z>djdk Z?dldm Z@dndo ZAdpdq ZBdrds ZCdtdu ZDdvdw ZEdxdy ZFdzd{ ZGd|d} ZHd~d ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd ZadS )_TestCommonz6test common functionality shared by all sparse formatsc                 C   s   t g dg dg dgd| _| | j| _| jj| _tt| j| _	i | _
i | _| j	D ]}| j|| j
|< | | j|| j|< q-t| j| j
tj  t| j | jtj   d S )N)   r   r   rV   )   r   r   r   )r   rV   r   r   d)r   dat	spcreatordatsp	_is_arraysetr#   unionmath_dtypeschecked_dtypes
dat_dtypesdatsp_dtypesrd   r   r<   float64r   )clsr3   r/   r/   r0   
init_class   s   


z_TestCommon.init_classc                    s8    fdd}t  trtd  jD ]}|| qd S )Nc                    s<    j |  }ttt| t dg t dg  d S )Nr   r   )r   assert_raises
ValueErrorboolr   r   )r3   r   r   r/   r0   check  s   
z$_TestCommon.test_bool.<locals>.checkz%Cannot create a rank <= 2 DOK matrix.)r;   TestDOKpytestskipr   r   r   r3   r/   r   r0   	test_bool  s   



z_TestCommon.test_boolc                 C   sH   t ddgg}| |}tdD ]
}|| }|| }qt||  d S )NTFrG   )r   r   ranger   r   )r   r   r   _r/   r/   r0   test_bool_rollover  s   

z_TestCommon.test_bool_rolloverc                    V   t  }|t |t fdd}t tttfst	d  j
D ]}|| q"d S )Nc           	         s    j |  } j|  }| }d|d d df<  |}t|}t|}t|}t|}t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k t|dk|dk	  t|dk|dk	  t|t
jk|t
jk	  d S Nr   r   )r   r   copyr   r   r   r   r   r7   r   r<   nan)	r3   r   r   dat2datsp2datbsrdatcsrdatcscdatlilr   r/   r0   r   -  s(   



z"_TestCommon.test_eq.<locals>.check8Bool comparisons only implemented for BSR, CSC, and CSR.r   filterr"   sup_complexr;   TestBSRTestCSCTestCSRr   r   r   r   supr   r3   r/   r   r0   test_eq)  s   



z_TestCommon.test_eqc                    r   )Nc           	         sL   j |  } j|  }| }d|d d df<  |}t|}t|}t|}t|}t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k	  t||k||k t|dk|dk	  t|dk|dk	  td|kd|k	  td|kd|k	  t|t
jk|t
jk	  d S r   )r   r   r   r   r   r   r   r   r7   r   r<   r   )	r3   r   r   r   r   r   r   r   r   r   r/   r0   r   R  s,   



z"_TestCommon.test_ne.<locals>.checkr   r   r   r/   r   r0   test_neN  s   



z_TestCommon.test_nec                    r   )Nc                    sL   j |  } j|  }| }d|d d df<  |}|t}d|d d df<  |}t|}t|}t|}	t	|}
t
||k ||k   t
||k ||k   t
||k ||k   t
||k ||k   t
||k |	|k   t
||k |
|k   t
||k ||k   t
||k ||k   t
||k ||	k   t
||k ||
k   t
||k ||k  t
||k ||k  dD ]}t|}t
||k  ||k  t
||k  ||k  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         ?      ?)rV   r   r   ignoreinvalidr   r   r   r   rd   complexr   r   r   r   r7   r   r<   rW   errstater   r3   r   r   r   r   
datcomplexdatspcomplexr   r   r   r   valr   r/   r0   r   y  sR   









z"_TestCommon.test_lt.<locals>.checkr   r   r   r/   r   r0   test_ltu  s   
4


z_TestCommon.test_ltc                    r   )Nc                    sL   j |  } j|  }| }d|d d df<  |}|t}d|d d df<  |}t|}t|}t|}	t	|}
t
||k||k  t
||k||k  t
||k||k  t
||k||k  t
||k|	|k  t
||k|
|k  t
||k||k  t
||k||k  t
||k||	k  t
||k||
k  t
||k||k t
||k||k dD ]}t|}t
||k ||k t
||k ||k 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   r/   r0   r     sR   









z"_TestCommon.test_gt.<locals>.checkr   r   r   r/   r   r0   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|}t|}t|}	t	|}
t
||k||k  t
||k||k  t
||k ||k t
||k ||k t
|	|k ||k t
|
|k ||k t
||k ||k t
||k ||k t
||	k ||k t
||
k ||k t
||k||k t
||k||k dD ]}t|}t
||k ||k t
||k ||k q j |  } j|  }| }d|d d df<  |}t
||k||k d S Nr   r   )rV   r   r   r   r   r   r   r   rd   r   r   r   r   r   r7   r   r<   rW   r   r   r/   r0   r     H   









z"_TestCommon.test_le.<locals>.checkr   r   r   r/   r   r0   test_le     
/


z_TestCommon.test_lec                    r   )Nc                    s   j |  } j|  }| }d|d d df<  |}|t}d|d d df<  |}t|}t|}t|}	t	|}
t
||k||k  t
||k||k  t
||k ||k t
||k ||k t
|	|k ||k t
|
|k ||k t
||k ||k t
||k ||k t
||	k ||k t
||
k ||k t
||k||k t
||k||k dD ]}t|}t
||k ||k t
||k ||k q j |  } j|  }| }d|d d df<  |}t
||k||k d S r   r   r   r   r/   r0   r   0  r   z"_TestCommon.test_ge.<locals>.checkr   r   r   r/   r   r0   test_ge,  r   z_TestCommon.test_gec                 C   sB   t | d td t | djd t | d d d S )Nr   r   r   )r   r   r   r   nnzcount_nonzeror   r/   r/   r0   
test_emptyf  s   z_TestCommon.test_emptyc                 C   s6   t | j }t| j | t| jj | d S r2   )r<   r   r   r   r   T)r   expectedr/   r/   r0   test_count_nonzerol  s   z_TestCommon.test_count_nonzeroc                 C   s.   t t| jd t t| jd t t| jd d S )Nr   r   r   r   r   r   )r   r   r   r   r/   r/   r0   test_invalid_shapesq  s   z_TestCommon.test_invalid_shapesc                 C      t | j d S r2   )reprr   r   r/   r/   r0   	test_reprv     z_TestCommon.test_reprc                 C   r   r2   )strr   r   r/   r/   r0   test_stry  r   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   r   rJ   float32r   	complex64
complex128r3   rV   )r<   r3   r   tocsctocsrtocoor   r   )
r   r   mytyper@   rE   cr   efmr/   r/   r0   test_empty_arithmetic|  s"   z!_TestCommon.test_empty_arithmeticc                 C   sB   t g dg dg dg dgd}tt|t| |  d S )Nr   r      r   r   r   r   r   r   r   r   )r   r   absr   r   r   rC   r/   r/   r0   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   )decimals)ndigits)r   r   r<   aroundroundr   r   )r   decimalrC   r/   r/   r0   
test_round  s
   z_TestCommon.test_roundc                 C   sV   t g dg dg dgd}tt|d| |d  tt| |j| d S )N)r  r   )r   r   r   rV   r      r   rV   )r   r   r<   powerr   r   r   NotImplementedErrorr  r/   r/   r0   test_elementwise_power  s   "z"_TestCommon.test_elementwise_powerc                 C   sd   t g dg dg dg dgd}t| | |   t g dg dg}tt| |j d S )Nr  r  r  r  r   )TFF)FFT)r   r   r   r   r   r  __neg__r  r/   r/   r0   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   DrC   r/   r/   r0   	test_real     
z_TestCommon.test_realc                 C   r#  r$  )r   r   r   imagr   r'  r/   r/   r0   	test_imag  r*  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   rV   r   r   rV   r   r   r   r   )r   r   rV   r   r   r   r  r   rV   r   r  krG   i)(   i?  r3  r   r   )   r   r   r   )r>   r   r   r   r   r   r   diagonalr   r<   r   empty)r   matsr	  rowscols
sparse_matr2  r/   r/   r0   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   rV   r   r  r      )      	   r   r   )offsetr   )r<   r   r   r   r   trace)r   rC   rD   r2  r/   r/   r0   
test_trace  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 d|_t| | tt|j|j	f tt|jd|j	df d S )N)r   r   rA  r  r/  )r   r   r   )CF))   r   )r   rI  orderr   rG   r   r   r   r   r   r   r         r3  rV   r@  )r   rG   r   r   r   r   )r   r   r   rO  rP  r3  rV   r   )r   r@  r   rV   r@  r   )
not_an_argr   r  Tr   )
r   r   reshaper   r   r   	TypeErrorr   r   r[   )r   r4   rK  sr5   desiredr/   r/   r0   test_reshape  s8   "



z_TestCommon.test_reshapec                    s    fdd  fdd}t jd g d}t jt jfD ]O}|D ]J\}}t | d |d }|D ]8}t||||ft j||f|d}| j||f|d}	|||	| t jj	|t
t|d	d
D ]}
|||	|
 qaq2q!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   )r<   r   r^   r   r   r   r   r   )r@   vr2  nij)dense_setdiagr/   r0   r_    s   

z=_TestCommon.test_setdiag_comprehensive.<locals>.dense_setdiagc              	      s  dt t| |ddfD ]}|dk rtjtdd}n	tjjdd|d} | || t }|t	d |
|| W d    n1 sEw   Y  t| |}t|jdkrdt||d	|f d
 ntt |t |}t|d | |d | d	|f d
 t|j| d	|f d
 qd S )Nr   rV   rP  r   r   rO  r[   ?Changing the sparsity structure of a cs[cr]_matrix is expensivez%s %derr_msg)r   r<   r   r   choicer   rX   r   r   r"   setdiagr   r   r   r^   rC   )r@   rE   r2  rr[  r   r   r\  r_  r,   r/   r0   check_setdiag  s    &z=_TestCommon.test_setdiag_comprehensive.<locals>.check_setdiagrT   )r6  r   r   r   r   r   r   r   r   r  r   r`  )r<   r   rU   r   r   r   r   r   r   rd  r^   r   )r   rh  shapesr3   r	  r\  ksr2  r@   rE   k2r/   rg  r0   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   rV   r   ra  r  r1  r   )r   r   r   )r   rV   rV   r.  r   )r   r   r   )rC  rV   r   rV   rC  rV   r   r   r   r   r   r   )r   r   r   r   )r   r<   r    r   r   r"   r   r   re  r   r7  r   r   )r   r	  m2r:   r   r/   r/   r0   test_setdiagC  s>   

"z_TestCommon.test_setdiagc                 C   s^   t g dg dg dg}| |}dd t| D }dd t| D }t|| d S )Nr   r   r   r   r   r   r.  c                 S      h | ]}t |qS r/   tuple.0ijr/   r/   r0   	<setcomp>f      z+_TestCommon.test_nonzero.<locals>.<setcomp>c                 S   rx  r/   ry  r{  r/   r/   r0   r~  g  r  )r   r   r
   nonzeror   r   rC   AspA_nzAsp_nzr/   r/   r0   test_nonzerob  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 )Nrv  rw  r.  c                 S   rx  r/   ry  r{  r/   r/   r0   r~  p  r  z1_TestCommon.test_numpy_nonzero.<locals>.<setcomp>c                 S   rx  r/   ry  r{  r/   r/   r0   r~  q  r  )r   r   r
   r<   r  r   r  r/   r/   r0   test_numpy_nonzerok  s
   
z_TestCommon.test_numpy_nonzeroc                 C   sP   t | jd | jdgd d f  t | jd | jdgd d f  d S Nr   r   )r   r   getrowr   r   r   r/   r/   r0   test_getrowu     &*z_TestCommon.test_getrowc                 C   sP   t | jd | jd d dgf  t | jd | jd d dgf  d S r  )r   r   getcolr   r   r   r/   r/   r0   test_getcoly  r  z_TestCommon.test_getcolc           	         s   t jd tg dg dg dg}t jdd}t g g}t d}tjdddd }|||||g  fd	d
}j	D ]}t
t D ]}||| qHq@d S )NrT   r   r   rV   r   r  r   rA  rC  r   )r3  r3  g{Gz?)densityc                    s  t  | | d}j|| d}tjdd t| |  t| j| j tt	|jd d t|jd d|jd d t|jd dj|jd dj t|jdd|jdd t|jddj|jddj t|jdd|jdd t|jddj|jddj t|jdd|jdd t|jddj|jddj t|jdd|jdd t|jddj|jddj W d    d S 1 sw   Y  d S )	Nr  r   )overaxisr   r   r   r   )
r'   r   r<   r   r   sumr   r3   r   isscalar)r3   r^  r   r   matricesr   r/   r0   r     s*   
 "z#_TestCommon.test_sum.<locals>.check)r<   r   rU   r'   randr   r   rj   r   r   r   r   )	r   dat_1dat_2dat_3dat_4dat_5r   r3   r^  r/   r  r0   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)r<   r   r   r   r   r   r  rW  r   r  r   r   r/   r/   r0   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  meanr   r   r3   r3   dat_mean
datsp_meanr   r   r/   r0   r        
z)_TestCommon.test_sum_dtype.<locals>.checkr   r   r   r   r/   r  r0   test_sum_dtype     


z_TestCommon.test_sum_dtypec                 C   s   t g dg dg dg}| |}t dgg}tdgg}|j|dd |j|d t|| td}ttd}|jd	|dd
 |jd	|d t|| d S Nr  r  r  r   T)r  keepdimsr  r   r   r   )r  r  r  r  )r   r   r'   r  r   r<   r   r&   r   r   r   dat_out	datsp_outr/   r/   r0   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   r<   r  r   r   r3   r   r   r   r  r  r/   r/   r0   test_numpy_sum     



z_TestCommon.test_numpy_sumc                    $    fdd} j D ]}|| q	d S )Nc                    s  t g dg dg dg| d} j|| d}t| |  t| j| j tt|jd d t|jd dd|jd d t|jd dj|jd dj t|jddd|jdd t|jddj|jddj t|jd	dd|jd	d t|jd	dj|jd	dj t|jd
dd|jd
d t|jd
dj|jd
dj t|jddd|jdd t|jddj|jddj d S )Nr  r   r  r   )r@  rA  rC  r  r  Tr  r  r   r   r   r   )	r   r   r   r  r   r3   r   r<   r  r3   r   r   r   r/   r0   r     s<   "z$_TestCommon.test_mean.<locals>.check)r   r   r/   r   r0   	test_mean  s   

z_TestCommon.test_meanc                 C   sx   t td}tg dg dg dg}| |}tt|jdd tt|jdd tt|jdd tt|jd	|d
 d S r  )	r&   r<   r   r   r   r   r   r  rW  r  r/   r/   r0   test_mean_invalid_params  s   
z$_TestCommon.test_mean_invalid_paramsc                    r  )Nr  r  r  c                    r  r  r  r  r  r/   r0   r     r  z*_TestCommon.test_mean_dtype.<locals>.checkr  r   r/   r  r0   test_mean_dtype  r  z_TestCommon.test_mean_dtypec                 C   s   t g dg dg dg}| |}t dgg}tdgg}|j|dd |j|d t|| td}ttd}|jd	|dd
 |jd	|d t|| d S r  )r   r   r'   r  r   r<   r   r  r/   r/   r0   test_mean_out  r  z_TestCommon.test_mean_outc                 C   r  r  )r   r   r<   r  r   r   r3   r  r/   r/   r0   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 )Nr-  r   r   r   r  r   r@  r   r   r3   )      @              ?)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   ri   linalgr)   r   r   r"   r   r   r   )
r   MsMMexpNsNNexpr   sMexpsNexpr/   r/   r0   	test_expm<  s*   
z_TestCommon.test_expmc                    s$    fdd}t fD ]}|| q	d S )Nc                    s   t g dg dg dg| }t &}|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 )
Nr-  r  r  r  r  r  r   r  r   )r   r   r   r"   r   r*   r   r   r   r<   r    r   rW  )r3   r  r   r  sMinvr   r/   r0   r   S  s    
	z#_TestCommon.test_inv.<locals>.check)r  r   r/   r   r0   test_invR  s   

z_TestCommon.test_invc                 C      t g dg dg dg dg}t| | | t g dg dg dg}t| | | t| j|dd |d d S 	Nr   r   r   r  )r   r   r   r  )r%  r   r   )r         @r   int16r  )r   r   r   r   rd   r  r/   r/   r0   test_from_arrayc  s    "z_TestCommon.test_from_arrayc                 C   r  r  )r'   r   r   todenserd   r  r/   r/   r0   test_from_matrixn  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   rd   r  r/   r/   r0   test_from_list{  s   z_TestCommon.test_from_listc                 C   s   t g dg dg dg dg}t|}t| | | | |}t| | | t g dg dg dg}t|}t| | | t| j|dd |d | |}t| | | t| j|dd |d d S r  )r   r   r   r   r   rd   r   r(  Sr/   r/   r0   test_from_sparse  s    

"z_TestCommon.test_from_sparsec           
      C   s  | j  }t|tjsJ t|| j t|jj	|jj
k | j jdd}t|| j t|jj	 t|jj
  | j jdd}t|| j t|jj	  t|jj
 tj| j j| j jd}| j j|d}t| j| t| j| t|j|u  ttj| j j| j jd}| j j|d}t| j| t| j| t||u  tg dg}|| j }|| j   }t|| tg dgj}| j| }| j  | }t|| | j| jtd}| jt}	t| |	 d S )NrG  rJ  rH  r  r  r  r  r  r  r  r        @)r   r  r;   r<   r'   r   r   r   flagsc_contiguousf_contiguousr   r   r3   baser&   r   r   r   r   rd   )
r   chkr  r@   dense_dot_denser   rE   check2spboolmatboolr/   r/   r0   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 )
NrG  rJ  rH  r  r  r  .r  r  )r   r   r   r   r   r   r  r  r  r<   r   r   r3   r   r   r   r   rd   )r   r   r  r  r@   r  r   rE   r  r  arrboolr/   r/   r0   test_toarray  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  )TFrU  FTc                    sj   t  | }t | }t|| t||u d|j }|| }||  ||< t|| || k |||< d S )N)r   )ru   r   r   r   )	attributer@   rE   r]  b_iS_castedS_copiedr/   r0   (check_equal_but_not_same_array_attribute   s   



zI_TestCommon.test_astype.<locals>.check_equal_but_not_same_array_attribute)csrcscbsr)indicesindptrdatacoo)rowcolr  dia)offsetsr  )	r   r   r#   rd   r   r3   r   formatr   )r   r(  r  r4   D_castedr   r  r   r/   r  r0   test_astype  s:   







z_TestCommon.test_astypec                 C   s   t g dg dg dg}| |}t|drd|jj_t|dr&d|jj_t|dr0d|jj_tD ]}|	|}|	|}t
|j|j q2d S )Nr  r  r  r  Fr
  r	  )r   r   hasattrr  r  	writeabler
  r	  r#   rd   r   r3   )r   r(  r  r4   r  r  r/   r/   r0   test_astype_immutable  s    








z!_TestCommon.test_astype_immutablec                 C   s   |  tddddd}t|jtd t| jtd t| j|j t|d jtd t|d	 jtd	 | }| }t	||u  d S )
Nr@  rJ   r  rV   r   r   r  r   r   )
r   r   rV  r   r3   r<   asfptyper  rd   r   )r   rC   rD   rG  r/   r/   r0   test_asfptype'  s   z_TestCommon.test_asfptypec                    r  )Nc                    sD    j |  } j|  }t|d |d   t|d |d   d S NrV   L1@r   r   r   r   r  r   r/   r0   r   5     

z*_TestCommon.test_mul_scalar.<locals>.checkr   r   r/   r   r0   test_mul_scalar4     

z_TestCommon.test_mul_scalarc                    r  )Nc                    sD    j |  } j|  }td| d|   td| d|   d S r  r  r  r   r/   r0   r   @  r  z+_TestCommon.test_rmul_scalar.<locals>.checkr  r   r/   r   r0   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 r2   )r   r<   r   r   rW  )r   r   r/   r/   r0   test_rmul_scalar_type_errorK  s   

"z'_TestCommon.test_rmul_scalar_type_errorc                    r  )Nc                    s    j |  } j|  }| }d|d< |}|| }t|| |  ||  }t| | |   ||d  }t|| |d   d S )Nr  rq  r   )r   r   r   r   r   r  r3   r   r   r@   rE   r  r   r/   r0   r   Q  s   

z#_TestCommon.test_add.<locals>.checkr  r   r/   r   r0   test_addP  s   

z_TestCommon.test_addc                    r  )Nc                    sF    j |  } j|  }| }d|d< |}|| }t|||   d S )Nr  rq  )r   r   r   r   r   r"  r   r/   r0   r   g  s   

z$_TestCommon.test_radd.<locals>.checkr  r   r/   r   r0   	test_raddf     


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 )NrT  r   r   r   r   r  r   r   r   r   r   rB  r   r  r   )r   r   r   r   r<   r   r   r   r3   r   r   rC   r   r/   r0   r   u  s   

z#_TestCommon.test_sub.<locals>.checkr   r   r<   r3   r   r/   r   r0   test_subt  s   

z_TestCommon.test_subc                    r&  )Nc                    s   j |  } j|  }t|| g dg dg dg t|| g dg dg dg td|  |   tg dg dg dgd}t|| ||   t|| | |  t| | | |  t||  ||   t|d | |d |  d S )NrM  r   r'  r(  r)  r   )r   r   r   r   r   r'   r*  r   r/   r0   r     s   

  "z$_TestCommon.test_rsub.<locals>.checkr   r+  r   r/   r   r0   	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 r/   r/   r|  r2  )r   r/   r0   
<listcomp>  r  z8_TestCommon.test_add0.<locals>.check.<locals>.<listcomp>r   r   c                    r.  r/   r/   r/  )r   r/   r0   r0    r  )r   r   r   r   r  r   r   )r3   sumSsumDr   r  r0   r     s   

z$_TestCommon.test_add0.<locals>.checkr  r   r/   r   r0   	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   rC  )rV   r  r   )r   rA  r   )r   r  r   y      ?       y              @y              y      @      y            @r   y      @       @y      @      y             ?y              y             @rC  )r   r   r   multiplyr   )	r   rC   rD   r  BsprG  r(  CspDspr/   r/   r0   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   )rA  rC  r=  r   rV   r   )rB  r@  r   )r  r   rV   )r@  r@  r@  r>  rT  r   r   N)r   r<   onesr   r   r   r   r   r8  r   rW  r!   )r   rC   rD   rG  r(  ErH  GHJKLr9  r;  EspFspHspHsppJspJsppKspr  
spmatricesr]  r^  
dense_multsp_multr/   r/   r0   #test_elementwise_multiply_broadcast  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 | | tg dg dg dgd}dt jt jdgdt jtt jgt jdt jd	gg}tt| j| | tg d
g dg}tg dg dg}| |}| |}t	t|| ||  tg dg dg}tg dg dg}| |}| |}t j
dd tt|| ||  W d    n1 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   r'  r(  r)  r         ?r  g      ?r   r4  r5  r6  r7  r>  )r  rV   r   r  )r   r   r   r   )divide)rS  r   )r<   r   r   r   r   r   r'   r   r   r   r   )r   r   denomrC   rD   r  r9  r/   r/   r0   test_elementwise_divide   s<   "





"z#_TestCommon.test_elementwise_dividec                 C   s   t g dg dg dg dg}| |}dD ]}|| }tj||}t| | t|j|j qdD ]	}t	t
|j| q5| |d dd d f }t	t
|jd d S )	Nr   r   rV   r   )r   r   r  r   )r   r   r   r   )r   r@  rA  rB  r   r   rV   r   )r   g@r%  r   r   )r   r   r<   r  matrix_powerr   r   r   r3   r   	Exception__pow__)r   rC   rD   exponentret_spret_npr/   r/   r0   test_pow#  s    
z_TestCommon.test_powc                 C   sn   |  tg dg dg dg dg}tg d| tg d|  tg dg}t|| ||   d S )Nr   r   r   r   r   r   rV   r   r  rV   r   r   r0  )r   r'   r   r   r   r   )r   r  r  r/   r/   r0   test_rmatvec5  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   rV   r   r>  r   r   r   r   r   r   )r   r   r!   r   r   r   r<   r@  r  r/   r/   r0   test_small_multiplication;  s   "&$z%_TestCommon.test_small_multiplicationc                 C   s   |  dgdgdgg}|jr/t|td | t|tdgg | t|td | 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   rV   r   r  r>  re  rf  )r   r   r   r<   r@  r   r   r  r/   r/   r0   .test_start_vs_at_sign_for_sparray_and_spmatrixG  s   &z:_TestCommon.test_start_vs_at_sign_for_sparray_and_spmatrixc                 C   s   |  dgdgdgg}t }t|| d t|| d t|| d t|| d t|| d t|| d t|| d t|| d d S )Nr   rV   r   r   r   )r   r   r   r   rC   rD   r/   r/   r0   test_binop_custom_typeT  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   rV   r   r  r   r   )r   r   r   ri  r/   r/   r0   !test_binop_custom_type_with_shapee  s   z-_TestCommon.test_binop_custom_type_with_shapec                 C   sR   |  tg dg dg dg dg}d}||}|| }t| |  d S )Nr_  r`  ra  rb  rG   )r   r   r   r   r   )r   r  scalaractualr   r/   r/   r0   test_dot_scalarr  s
   &
z_TestCommon.test_dot_scalarc                 C   sD  |  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||| ||   |jst||| ||   t|| |||   t||| ||   tt	||d tt	|d| d S )
Nr_  r`  ra  rb  r   r   rV   r   r>  )
r   r   r   operatormatmulr   r   r   r   r   )r   r  rD   r  rp  r/   r/   r0   test_matmulz  s   &"z_TestCommon.test_matmulc                 C   s  |  tg dg dg dg dg}tg dgj}t|| | |  t|tg d jd t|tdgdgd	gg jd
 t|tdgdgd	gg jd
 tt	|tg d t
 tt	|tg dj tj tddgtg dtdgdggtg dtdgdggg}|D ]	}tt|j| qt|tg d t| g d t|dgdgd	gg tt| g dj d S )Nr_  r`  ra  rb  r>  )r  r   rV   r   )r  r   r0  )r   r'   r   r   r   r   r   r   r   r;   r	   r<   r   r   r   r   r&   )r   r  r  bad_vecsr4   r/   r/   r0   test_matvec  s   &  "$2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`  ra  rb  r   r   rV   r   rP  g333333?r   r  r   r@  )r'   r   r   r   r   r  r  r  r   rU   r   r   r   r   r   r   r   r   )r   r@   a2rE   aspbspcspr  wantrF  fracrC   r]  r^  rf  rD   r/   r/   r0   test_matmat_sparse  s^     




z_TestCommon.test_matmat_sparsec                 C   s   t g dg dg dg dg}| |}tddgddgd	d
ggt ddgddgd	d
ggg}|D ]}|| }tt|t| t|jd t|t|| q1d S )Nr_  r`  ra  rb  r   rV   r   r  r   r@  r  rV   )	r'   r   r   r   r;   typer   r   r   )r   r@   ru  bsrE   resultr/   r/   r0   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|d
 |}t|j| t| | q dD ]}||}t|| | |d	 |}t||d	  qed S )Nr-  r   r   r  )r   r   r   r   rV   r   r   )r  r  r  r  r  r8   lil              @_matrix)r   dense)	rj   r   r   r   asformatr   r  r   eval)r   rC   r(  r  r@   rE   r  r/   r/   r0   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 )NrV  rM  r   r   r  r   r  r   r   r   )r  to)r   rV   r   r@  )r   rV   r   r  r@  rI  	blocksize)r   r   r   ru   r   r   )	r   r4   r5   rC   r  r  fnXYr/   r/   r0   
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                    s\   t  | | d}|}| }| }t| | t|  | t|j|j d S r  )r   r   r
   r   r   r   r3   )r3   r^  r   r   r@   rE   r  r/   r0   r     s   
z)_TestCommon.test_transpose.<locals>.checkrT  r  r   r   )axes)r   r<   r   r   r   r
   r   r   r   r   r   r   r   r   )r   r  r  r   r8  r3   r^  r/   r  r0   test_transpose  s   

z_TestCommon.test_transposec                    r  )Nc                    sD    j |  } j|  }|| }t|||  || }t|||  d S r2   )r   r   r   r3   r   r   sum1sum2r   r/   r0   r   4  s   

z)_TestCommon.test_add_dense.<locals>.checkr  r   r/   r   r0   test_add_dense3  r%  z_TestCommon.test_add_densec                    r&  )Nc                    s    j |  } j|  }|jtkr'|| }t|||  || }t|||  d S || | | }t|||  || | | }t|||  d S r2   )r   r   r3   r   r   r  r   r/   r0   r   C  s   


z)_TestCommon.test_sub_dense.<locals>.checkr   r+  r   r/   r   r0   test_sub_denseA  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  r   r  )r   r   rV   )r   r   r@  r>  )r   y      @       @r   )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 )Nrl  r   scalar2r   r  rj   zHTaking maximum .minimum. with > 0 .< 0. number results to a dense matrix)r<   r\   complexfloatingr   rd   r|  r   r   r   r"   maximumminimumr   r   r   r3   )
r3   dtype2btyperC   rD   r   max_smin_smax_dmin_dA_denseA_dense_cpxB_denser   r/   r0   r   b  s2   
z/_TestCommon.test_maximum_minimum.<locals>.check)rl  r  r  rj   )r<   r   r   r   float_complex_r3   )r   r   r3   r  r  r/   r  r0   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 )NTrU  Fr  )	r   r   r   r  	__class__r   ru   r   rF   )r   rC   toselfr/   r/   r0   	test_copy  s   z_TestCommon.test_copyc                 C   sF   t tddd}| |}t||D ]\}}t| | qd S )N2   r   rG   )r'   r<   r   rV  r   zipr   r   )r   rD   rC   r4   r5   r/   r/   r0   test_iterator  s
   
z_TestCommon.test_iteratorc                 C   s  t g }|d}|d}|d}|d}|d}tddg}| |}| |}	| |}
| |}| |}| |}t|| t|| t|	| t|| t||	 t|| t|
| t|| t|
| t|| t||
 t|| t||
 t|| t|| t|| tt	|j| tt	|j| t|
| t
|| t|	
|	 t
|| t|
| t
|| t|
| t
|| t|	
| t
|| t|
| t
|| t|
d t
|d t|	
d t
|d t|
d t
|d tt	|j
| tt	|j
| t|| || t|	|	 || t|| || tt	|j| tt	|	j| d S )Nr4  r  r6  re  ri  r   r@  )r   rV  r<   r@  r   r   r   r   r   r   r8  r   )r   r   r@   rE   r  r   r  r  ru  rv  rw  dspespfspr/   r/   r0    test_size_zero_matrix_arithmetic  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 )Nr4  r6  ri  )r   rV  r   r   r  r   r  r  toliltodoktobsr)r   r   r@   rE   r  r	  spmr/   r/   r0   test_size_zero_conversions  s   



z&_TestCommon.test_size_zero_conversionsc                    s4   dd l  t }|t | fdd}|  d S )Nr   c                     s   j  } t jD ]E}  j| |d}t| j|j t| 	 |	  t| j
|j
 | j D ]\}}t|tjrEt||j|  q2t||j| k q2q
d S )N)protocol)r   r   r   HIGHEST_PROTOCOLloadsdumpsr   r   r   r   r  r9   itemsr;   r<   r	   r   )r   r  sploadedkeyr   pickler   r/   r0   r     s   
z&_TestCommon.test_pickle.<locals>.check)r  r   r   r"   )r   r   r   r/   r  r0   test_pickle  s   

z_TestCommon.test_picklec                    s"    fdd}dD ]}|| qd S )Nc                    sv   | dkr	t d  jttfv rt d tt| } tdddd }||	 }||}t
|	 | d S )Nsignz2sign conflicts with comparison op support on Numpyz%Unary ops not implemented for dok/lilrO  r  r         4@)r   r   r   r   r   ru   r<   r   rV  r   r   )r|   ufuncr  X0X2r   r/   r0   r     s   


z5_TestCommon.test_unary_ufunc_overrides.<locals>.check)sintanarcsinarctansinhtanharcsinharctanhrintr  expm1log1pdeg2radrad2degfloorceiltruncsqrtr  r/   )r   r   r|   r/   r   r0   test_unary_ufunc_overrides  s   
z&_TestCommon.test_unary_ufunc_overridesc                 C   sB  t g dg dg dg}| |}t|dd u  t| ddgddgddgg |d	 t| ddgddgg |d t| ddgddgddgg |d
 t| g dg dg dg |d
 t| g dg dg dg |dd t| ddgddgddgg dD ]	}tt|j| qd S )Nr   r   r   r  rV   r   r   r   r   r   r   r   r   rV   r   r   rV   r   rV   rV   r   r  )rV   r   r   r  )r   )r   rV   rR  r>  )	r<   r   r   r   resizer   r   r   r   )r   r(  r  	bad_shaper/   r/   r0   test_resize  sJ   





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 )NFrU  )r3   r   T)r  r  r  r  r8   r  )r   r  r  r7   r   NON_ARRAY_BACKED_FORMATSr   rF   r3   r<   r   r   r  )r   rC   self_formatrG  other_formatrD   r/   r/   r0   test_constructor1_base;  s2   
z"_TestCommon.test_constructor1_baseN)br   r   r   __doc__r#   r   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  r  r   r"  r)  r,  r=  rF  rZ  r   markslowro  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r   r!  r#  r$  r,  r-  r3  r<  rQ  rU  r^  rc  rg  rh  rj  rk  rn  rq  rs  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r/   r/   r/   r0   r      s    
%'?>::!,
7	
#"




)%
(
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rQtttj	||j
 || }||9 }ntttj	|| ||j
}||j
9 }t|| tttj|| d S )NrT  )r<   r@  r   r   r   r   r   r   ro  imulr   r   rW  	ifloordiv)r   r@   rE   r4   r5   r/   r/   r0   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 N	same_kind)castingrV   r  	r   r   r<   can_castintr   r   r   r  r3   r   r   r@   rE   r   r/   r0   r     s   

z6_TestInplaceArithmetic.test_imul_scalar.<locals>.checkr  r   r/   r   r0   test_imul_scalar~  s   

z'_TestInplaceArithmetic.test_imul_scalarc                    s2    fdd} j D ]}t|tjs|| q	d S )Nc                    s    j |  } j|  }tjt| ddr)| }|d }| }|d }t||  tjt| ddrJ| }|d }| }|d }t||  d S d S r  r  r  r   r/   r0   r     s   

z6_TestInplaceArithmetic.test_idiv_scalar.<locals>.check)r   r<   r  int_r   r/   r   r0   test_idiv_scalar  s   
z'_TestInplaceArithmetic.test_idiv_scalarc                 C   s   |  td}|  td}|  td}||7 }|| }t| |  ||9 }|| }t| |  ||8 }|| }t| |  tttj|| d S )Nr   )	r   r<   r    r   r   r   rW  ro  r  )r   r@   rE   bpr/   r/   r0   test_inplace_success  s   z+_TestInplaceArithmetic.test_inplace_successN)r   r   r   r  r  r  r  r/   r/   r/   r0   r  ]  s
     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   rV   r   r  r  rd  r   r   r   )r  r   r  )r  r   r>  )
r   r   r   r   r   r|  r   
IndexErrorrW  __getitem__)r3   r(  rC   r  r  r]  r^  r}  r   r/   r0   r     s"   

z*_TestGetSet.test_getelement.<locals>.checkr#   r<   r3   r   r/   r   r0   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 )NrT  r  ra  r   r4  r  r   rV   r   r  r  rr  rB  r   r   rA  r   r   r   )r   r   r   rB  )r   r   r  r   )rV   r   rA  r   ))r   r  )r   r  rf  rT  r   g     ^@r>  )r  )r   r   r   r"   r|  r<   bool_r   r   r   r  __setitem__r   r   r\   r  rW  )r3   rC   r   r}  r[  r   r/   r0   r     s@   
	
z*_TestGetSet.test_setelement.<locals>.checkr  r   r/   r   r0   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   rG   r  ra  r   )r   r  )r   r   r   r"   r   r3   rC   r   r   r/   r0   r   	  s   
z9_TestGetSet.test_negative_index_assignment.<locals>.checkr+  r   r/   r   r0   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r   rG   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 ; ra  r   rb  )r   r   r   r"   r   r  )r]  r^  nitemsr,   rC   r   r	  r\  r   r/   r0   	_test_set	  s   z3_TestGetSet.test_scalar_assign_2.<locals>._test_setrV   r   r   rB  r	  r   r   r   )r   r   r  r]  r^  r/   r  r0   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 )Nr   ra  r   r  r  rf  rC  r   r<   r   r   r   r"   r   r   r   rC   rD   r   rG  r/   r/   r0   test_index_scalar_assign!	  s   


z$_TestGetSet.test_index_scalar_assignN)r   r   r   r  r  r  r  r  r/   r/   r/   r0   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 )NrO  r   r  r   r  r  )r<   r   rU   r   r   r  r   r   r   r   r   r   r"   r(   solver   )r   r\  rC   r4   r5   rf  r]  r   r/   r/   r0   
test_solve/	  s&   $
z_TestSolve.test_solveN)r   r   r   r  r/   r/   r/   r0   r  .	      r  c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )_TestSlicingc                 C   s   t | jdtjddddf jtj t | jdtjddddf jtj t | jdtjddddf jtj t | jdtjddddf jtj d S )Nr   rG   r  r   r   r   )r   r   r<   r  r3   rJ   r   r   r   r/   r/   r0   test_dtype_preservationF	  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   rV   r<   r  rJ   r   r   r   r   r3   r   dtrC   r/   r/   r0   #test_dtype_preservation_empty_sliceL	  s   z0_TestSlicing.test_dtype_preservation_empty_slicec                 C   s`  t tddd}| |}t|dd d f |dd d f   t|dddf |dddf   tg dg dg dg d	g}| |}t|ddd
f |ddd
f   tg dg dg dg d	g}| |}t|ddd
f |ddd
f   t|ddd f |ddd f j tt	|j
td df tt	|j
dtd
df d S )N      I@r   rG   r   rV   r   rV   r   r  r   r@  r  r.  r   r  r   r   r      r@  rA  )r&   r   rV  r   r   r   r'   rC   r   r  r  slicer   rD   rC   rG  r(  rA  rH  r/   r/   r0   test_get_horiz_sliceV	  s   
&& 
& 
&$z!_TestSlicing.test_get_horiz_slicec                 C   s  t ddd}| |}t|dddgf |dddf   t|d d dgf |d d df   tg dg dg d	g d
g}| |}t|dddgf |dddf   t|d d dgf |d d df   tg dg dg d	g d
g}| |}t|d d dgf |d d df   t|dd dgf |dd df   tt|jt	d df tt|jdt	ddf d S )Nr&  r   rG   rV   r   r   r'  r(  r  r.  r   rv  r)  r   r*  r@  rA  )
r   rV  r   r   r   r   r   r  r  r+  r,  r/   r/   r0   test_get_vert_slicej	  s   
(( 
(( 
((z _TestSlicing.test_get_vert_slicec                 C   s.  t ddd}| |}t|ddddf  |ddddf  t|dd d df  |dd d df  t|d ddd f  |d ddd f  tg d	g d
g dg dg}| |}t|ddddf |ddddf   t|d d dd f |d d dd f   d S )Nr&  r   rG   rV   r   r   r   r   rv  r)  r  r.  )r   rV  r   r   r   r   )r   rD   rC   rA  rH  r/   r/   r0   test_get_slices	  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 )Nr  r      rV   rP  r   feature not implemented)	r<   r   r  r   r   r   r   r   r   )r   v0r[  r/   r/   r0    test_non_unit_stride_2d_indexing	  s   "
&z-_TestSlicing.test_non_unit_stride_2d_indexingc                 C   s  t tddd}| |}t|d |d  t|d |d  t|d |d  t|tddf |d  t|dtdf |d  t|tdtdf |d  t|d	d d f  |d	d d f  t|d	ddf  |d	ddf  t|td	ddf  |d	ddf  t|d d d	f  |d d d	f  t|d
ddf  |d
ddf  t|dddf  |dddf  t|d	dd
f  |d	dd
f  t|d	dtd
f  |d	dd
f  t|dd	dd	f  |dd	dd	f  t|dd d
d f  |dd d
d f  t|d dd df  |d dd df  t|d	dd df  |d	dd df  t|dd d f  |dd d f  t|dd d f  |dd d f  t|tdd d f  |dd d f  t|dd  |dd  t|dd  |dd  ttd	tdd }t||d d f  |d	dd d f  t|d d |f  |d d d	df  d S )Nr  r   rG   r  r  r	  r   r   rV   r   r  rC  r   r  )	r&   r   rV  r   r   r   r   r+  r   )r   rD   rC   rX  r/   r/   r0   test_slicing_2	  s8   
&&*&&&&*....&&**.z_TestSlicing.test_slicing_2c                    s  t tddd|  tj}|d d |dd |dd  |dd d |dd |dd |d	dd
 |dd d |d dd
 dd|d d  |dd d
ddtd
tdg} fdd}t|D ]\}}|| qf fdd}t|D ]\}}t|D ]	\}}||| qqzg }	t	j
dgd  D ]\}}}
|
dkrq|	t|||
 q|	D ]}||| ||d |d| qd S )Nr  r   rG   rV   r   r   r5  rO  rB  r   r  r   r   r  r  c                    s^    |  }|  }|j dkrt||t|  d S |jdkr#|jdkr#d S t| |t|  d S Nr/   r   )r   r   r   r[   r   r   )r@   r4   r5   rC   rD   r/   r0   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 r5  )
r;   r<   r	   r  r   r   r   r[   r   r   )r@   rE   aibir4   r5   r6  r/   r0   check_2	  s   


z,_TestSlicing.test_slicing_3.<locals>.check_2)
Nr   r   rV   r   r5  r   r   r   i)r&   r   rV  r   r<   s_r   r   	enumerate	itertoolsproductr>   r+  )r   r;  slicesr7  r^  r@   r:  r]  rE   extra_slicesr  r/   r6  r0   test_slicing_3	  s:   
*$


z_TestSlicing.test_slicing_3c                 C   sN  t tddd}| |}t|d  |d j t|d  |d j t|d  |d j t|d  |d j t|dd df  |dd df j t|ddd f  |ddd f j t|dd ddf  |dd ddf j t|dddd f  |dddd f j t|d	 |d	  t|d
 |d
  d S )Nr  r   rG   .).)r   .).r   r   )r   r   .)r   .r   )r&   r   rV  r   r   r   rC   r   r   rE   r@   r/   r/   r0   test_ellipsis_slicing
  s   
((,,z"_TestSlicing.test_ellipsis_slicingc                 C   s  t tddd}| |}tjdd t|d  |d d d d f j W d    n1 s2w   Y  tjdd t|d  |d d d d f j W d    n1 sZw   Y  tjdd t|d  |d	d d f j W d    n1 sw   Y  tjdd t|d	d d
d
f  |d	d d d f j W d    n1 sw   Y  tjdd t|d
d
d	d f  |d d d	d f j W d    n1 sw   Y  tjdd t|d  |d d d	f j W d    d S 1 sw   Y  d S )Nr  r   rG   zremoved in v1.13match)..)...)r   ..r   .)..r   )	r&   r   rV  r   r   deprecated_callr   r   rC   rB  r/   r/   r0   test_multiple_ellipsis_slicing
  s(   
&&"00"$z+_TestSlicing.test_multiple_ellipsis_slicingN)r   r   r   r!  r%  r-  r.  r/  r3  r4  rA  rC  rG  r/   r/   r/   r0   r  E	  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 )	Nr   ra  r   r   r  r   rC  r   r  r  r/   r/   r0   test_slice_scalar_assign+
  s   

	z+_TestSlicingAssign.test_slice_scalar_assignc                    sh   d\  fdd}dt dfdt d ddfdt dd	ftdt dd	ffD ]	\}}||| 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=ra  r   rb  )r   r   r   r"   r<   r   r   r   )r]  r^  r,   rC   r   rD   r  r/   r0   r  <
  s   z9_TestSlicingAssign.test_slice_assign_2.<locals>._test_setrV   r   rG   r  r   r   )r+  r   r  r/   r  r0   test_slice_assign_29
  s   $z&_TestSlicingAssign.test_slice_assign_2c                 C   s@  |  d}t }|td d|d< d|d< d|d< d	|d
< |d	 }|dd d f |dd d f< t|dd d f j|dd d f j |d	 }|d dd df |d d d d f< ttd|d  |j |d	 }|dd d f j|d ddf< t|dd d f jj|d ddf j W d    d S 1 sw   Y  d S )Nr  ra  rV   r4  rA  r  r   rV   r   rG   rf  r   r   r   )	r   r   r   r"   r   rC   r<   r   r   )r   rD   r   rC   r/   r/   r0   test_self_self_assignmentK
  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 K}|td	 d
|d< d|d< d|d< || |d d d d f< t| | tt||d dd df< t| d dd df | W d    d S 1 snw   Y  d S )Nr  rG   r   r   )r   r   r@  )r      r   r  r   r   r  ra  r   r4  r   r  rA  rK  rV   )r   r   r   r   r"   r   r   r   )r   rD   r   blockr   r/   r/   r0   test_slice_assignmentc
  s&   
 "z(_TestSlicingAssign.test_slice_assignmentc                 C   s   |  d}t )}|td d|d< d|d< d|d< d	|d
< ttd|d d< W d    n1 s4w   Y  tg dg dg dg dg}t|	 | d S )Nr  ra  r   r4  r   r  rA  rK  rG   rf  r  r`  r.  rM  )
r   r   r   r"   r   r<   r    r   r   r   )r   rD   r   r   r/   r/   r0   "test_sparsity_modifying_assignmentw
  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  rV   r   r   rB  r   r  r   r   r   r  r  ra  rG     r4  d   r>  r  r0  )r  r   r   r   rV   r  )r   r   r   r  )r   r   r   r  r<   r;  r   r   r   r"   r<  r   r   r   r   r   r   r   r  listr+  r   )
r   rC   rD   r;  r?  r   r^  r@   r]  rE   r/   r/   r0   test_set_slice
  sd   
*$($

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   rV   r   r   r   r.  )r   r<   r@  r   r   ri  r/   r/   r0   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   rw  r  )r   r<   r@  r   r   r   r   rC   r4   r/   r/   r0   test_assign_1d_slice
  s
   
$z'_TestSlicingAssign.test_assign_1d_sliceN)r   r   r   rI  rJ  rL  rP  rQ  rV  rX  rZ  r/   r/   r/   r0   rH  *
  s    .rH  c                   @   s`   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd ZdS )_TestFancyIndexingzTests fancy indexing features.  The tests for any matrix formats
    that implement these features should derive from this class.
    c                 C   s   t jt jt jt jfD ]=}| jd|d}t|d d ddgf j| t|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#  r/   r/   r0   #test_dtype_preservation_empty_index
  s   z6_TestFancyIndexing.test_dtype_preservation_empty_indexc                 C   s^   |  tddg}ttttf|jd ttttf|jd tttf|jg dg df d S )Nr   foorV   r]  r>  r0  )r   r<   r   r   r  r   rW  r  r  r/   r/   r0   test_bad_index
  s   z!_TestFancyIndexing.test_bad_indexc                 C   sV  t tddd}| |}t|ddg  |ddg  t|dddgf  |dddgf  t|dddgf  |dddgf  t|tdddgf  |dddgf  t|dtddgf  |dddgf  t|tdtddgf  |dddgf  t|d d g d	f  |d d g d	f  t|dd
dgf  |dd
dgf  t|dd
ddgf  |dd
ddgf  t|dd
tddgf  |dd
ddgf  t|ddgdf  |ddgdf  t|ddgdf  |ddgdf  t|tddgdf  |ddgdf  t|ddgtdf  |ddgdf  t|tddgtdf  |ddgdf  t|ddgd d f  |ddgd d f  t|ddgddf  |ddgddf  t|tddgddf  |ddgddf  tt|ddgdd
gf |ddgdd
gf  tt|ddgddgf |ddgddgf  tt|tddgddgf |ddgddgf  tt|ddgtddgf |ddgddgf  tt|tddgtddgf |ddgddgf  t|dgdggdd
gf  |dgdggdd
gf  t|dgdgdggddgf  |dgdgdggddgf  t|tdgdgdggddgf  |dgdgdggddgf  t|dgdgdggtddgf  |dgdgdggddgf  t|tdgdgdggtddgf  |dgdgdggddgf  t|ddg  |ddg  t|ddg  |ddg  t|tddg  |ddg  t|ddgd d f d d dd
gf  |ddgd d f d d dd
gf  t|ddgd d f d d ddgf  |ddgd d f d d ddgf  t|tddgd d f d d tddgf  |ddgd d f d d ddgf  t|d d ddgf dd
gd d f  |d d ddgf dd
gd d f  t|d d ddgf ddgd d f  |d d ddgf ddgd d f  t|d d tddgf tddgd d f  |d d ddgf ddgd d f  ttdtd
d }t||d d f  |dd
d d f  t|d d |f  |d d dd
f  t	jdggt
d}t|||f  |||f  t|g gg gf  |g gg gf  d S )Nr  r   rG   r   r   r   rV   r  )rV   rB  r   r   r  rC  r  rB  r  r   r  )r&   r   rV  r   r   r   r   r+  r   r<   r  )r   rD   rC   rX  r]  r/   r/   r0   test_fancy_indexing
  s   
&&**..*.2&&**...2..,,06""&"HH."HH."***z&_TestFancyIndexing.test_fancy_indexingc                 C   s   t jd d}d}d}tt j||}t ||dk}t jj| d ||d}t jj| d ||d}| |}|||f }t|rH|	 }t
||||f  || }	|| }
tt|j|	|f tt|j||
f d S )NrT   r  r@  r  rR  r   r`  )r<   r   rU   r&   r  r8  rX   r   r!   r   r   r   r  r  )r   NUM_SAMPLESr  r  r(  IrD  r  SIJI_badJ_badr/   r/   r0   test_fancy_indexing_randomizedA  s"   
z1_TestFancyIndexing.test_fancy_indexing_randomizedc           	      C   s  t jd ttddd}| |}t jt jjddddt	d}t jt jjddddt	d}t jt jjddd	dt	d}t
t|| ||  t
t|d d |f |d d |f  t
t|| ||  t
t||d
k ||d
k  t 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 g  tt|j| tt|j| tttf|j|df d S )NrT   r  r   rG   r   rV   r`  r  r  rC  )TFTTF)
FTTFTFFFFF)r@  r*  Tr  )r   r   r   )r<   r   rU   r&   r   rV  r   r   rX   r   r   r   r   r   r  r  r   )	r   rD   rC   rb  rD  r  Z1Z2Z3r/   r/   r0   test_fancy_indexing_boolean[  s,   
&z._TestFancyIndexing.test_fancy_indexing_booleanc           	      C   s   t jd ttddd}| |}t jt jjddddt	d	}t
|}tt|| ||  tt||d
k ||d
k  t jt jjddddt	d	}t jt jjddddt	d	}t
|}t
|}tt|j| tt|j| tttf|j|df d S )NrT   r  r   rG   r   rV   r  r`  r  rC  )r   r*  )r@  rG   r   )r<   r   rU   r&   r   rV  r   r   rX   r   r   r   r   r   r  r  r   )	r   rD   rC   r  XspZr  ZspYspr/   r/   r0   "test_fancy_indexing_sparse_boolean{  s   
z5_TestFancyIndexing.test_fancy_indexing_sparse_booleanc                 C   sd   |  tg dg dg dg}t|ddk}t|d d |f  ddgddgddgg d S )Nr  r`  r   r   )r   r   r<   ravelr  r   r   )r   r   desired_colsr/   r/   r0   #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   r4  rV   )r   r   r   r   r  r<   r   r/   r/   r0   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   rV   r   zChanging the sparsity structure)r   r   r   r   r"   r   r   )r   r   r   r/   r/   r0   test_fancy_indexing_2d_assign  s   &"z0_TestFancyIndexing.test_fancy_indexing_2d_assignc                 C   s
  t tddd}d|dd d f< d|d d df< d|d< | |}t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 )Nr  r   rG   r   r   rV   r   r@  FFFFFr  r   r   rV   r   r  	r&   r   rV  r   r<   r   r   r   r  r   rD   rC   rE  rD  r/   r/   r0   test_fancy_indexing_empty  s   
"z,_TestFancyIndexing.test_fancy_indexing_emptyN)r   r   r   r  r\  r_  r`  rf  rj  ro  rr  rs  rt  rz  r/   r/   r/   r0   r[  
  s    
j 	r[  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  r{  r	  r   sort_indicesr   )r  r	  r/   r/   r0   check_remains_sorted  s   
r}  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 )Nr   r]  rV   r^  )r   r<   r   r   r  r   rW  r  r  r/   r/   r0   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t f}t .}|td d|| |f< t| d|| |f< W d    n1 s5w   Y  W d    n1 sDw   Y  t|	 | d S Nra  r   )
r   r&   r<   r   r   r   r"   r}  r   r   )r]  r^  rC   rD   r   r  r/   r0   _test_set_slice  s   
zI_TestFancyIndexingAssign.test_fancy_indexing_set.<locals>._test_set_slicer  rG   r  r   r   r   rV   )r  rT  )r+  r<   r   r   r  r]  r^  r/   r  r0   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 )
Nr   r  ra  r   r   rV   r  r  r  )r   r   r   r"   r|  r   r  r  r   r/   r0   r     s   $"zD_TestFancyIndexingAssign.test_fancy_assignment_dtypes.<locals>.checkr  r   r/   r   r0   test_fancy_assignment_dtypes  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
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
td}g d|d< t|	 | W d    d S 1 sGw   Y  d S )Nr  r   r  r  ra  r   r   rV   r  rG   rO  r  )r   rG   rO  r  r   r?  r>  )r>  r  r@  )r   r    r   r   r   r"   r}  r   r   r   r&   r<   r   r   r  )r   rC   rD   i0i1i2r   rG  r/   r/   r0   test_sequence_assignment  sT   






 



$z1_TestFancyIndexingAssign.test_sequence_assignmentc                 C   s   t tddd}d|dd d f< d|d d df< d|d< | |}tg d}d	||< tt|| tjg td
}d	||< tt|| d	|||f< tt|| tjg dtd
d d d f }d	|||f< tt|| d	|||f< tt|| d S )Nr  r   rG   r   r   rV   ru  rv  *   r  rw  rx  ry  r/   r/   r0   test_fancy_assign_empty  s$   
z0_TestFancyIndexingAssign.test_fancy_assign_emptyN)r   r   r   r  r  r  r  r  r/   r/   r/   r0   r~    s    .r~  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 ]c\}}t jd	 tt jd
d}| |}|||f }t|r| }t	||||f  |d
 }|d }t
t|j||f t
t|j||f t
t|j||gtd f t
t|jtd ||gf q_d S )Nr   rV   r   r   r  rV   r>  r  r   r@  r   rV   r   r   rT   r   rA  )r<   r   r   rU   r&   r  r   r!   r   r   r   r  r  r+  )	r   setsrb  rD  r(  r  rc  rd  re  r/   r/   r0   test_fancy_indexing_ndarray6  s.   "$$"
z._TestFancyMultidim.test_fancy_indexing_ndarrayN)r   r   r   r  r/   r/   r/   r0   r  5  r  r  c                   @   r  )
_TestFancyMultidimAssignc           	      C   s  t jd tt jdd}| |}t jdd}t g dg dg}t g dg d	g}t| ||||f< W d    n1 sFw   Y  ||||f< t|	 | |d }|d }g d}t| ||||f< W d    n1 syw   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 )
NrT   r   rA  rV   r   r>  r  r  r  )r<   r   rU   r&   r  r   r   r}  r   r   r   r  r  	r   r(  r  r  rb  rD  rd  re  rG  r/   r/   r0   test_fancy_assign_ndarrayY  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t f}d|| |f< t|	 | d S r  )
r   r}  r   r   r"   r&   r<   r   r   r   )r]  r^  rC   r   rD   r  r/   r0   r  }  s    zR_TestFancyMultidimAssign.test_fancy_indexing_multidim_set.<locals>._test_set_slicer   rV   r   r   r  r>  r   rV   r  )r   r  r   )r  r   rV   )r<   r   r  r/   r  r0    test_fancy_indexing_multidim_setz  s   
z9_TestFancyMultidimAssign.test_fancy_indexing_multidim_setc           	      C   s  t jd tt jdd}| |}t jdd}g dg dg}g dg d	g}||||f< ||||f< t| | d
d |D }dd |D }g d}||||f< ||||f< t| | d|||f< d|||f< t| | tt	|j
||f| tt	|j
||f| d S )NrT   r   rA  rV   r   r>  r  r  r  c                 S      g | ]	}d d |D qS )c                 S      g | ]}|d  qS r   r/   r|  iir/   r/   r0   r0    r  N_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>.<listcomp>r/   )r|  r]  r/   r/   r0   r0        zC_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>c                 S   r  )c                 S   r  rA  r/   r|  jjr/   r/   r0   r0    r  r  r/   )r|  r^  r/   r/   r0   r0    r  )r<   r   rU   r&   r  r   r   r   r   r  r  r  r/   r/   r0   test_fancy_assign_list  s(   
z/_TestFancyMultidimAssign.test_fancy_assign_listc           	      C   s   t jd tt jdd}| |}g d}g d}dd |D }dd |D }g d	}t dd d d f }tt|j	|t
d f| tt|j	t
d |f| d S )
NrT   r   rA  )r   rV   r   r   r  rV   )r   r@  r   rV   r   r   c                 S   r  r  r/   r  r/   r/   r0   r0    r  zD_TestFancyMultidimAssign.test_fancy_assign_slice.<locals>.<listcomp>c                 S   r  r  r/   r  r/   r/   r0   r0    r  )r   rV   r   r  r   r@  rA  )r<   r   rU   r&   r  r   r   r   r  r  r+  )	r   r(  r  rb  rD  rd  re  C1C2r/   r/   r0   test_fancy_assign_slice  s   
z0_TestFancyMultidimAssign.test_fancy_assign_sliceN)r   r   r   r  r  r  r  r/   r/   r/   r0   r  X  s
    !r  c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	_TestArithmeticz&
    Test real/complex arithmetic
    c                 C   s   t g dg dg dg dgd| _t g dg dg dg d	gd
| _t g dg dg dg dgd| j_t| jd dd| j  t| jjd dd| jj  t| jjd dd| jj  | | j| _| | j| _	d S )N)g      g      @r         @r   r   )g      	@g     g      ?r   r   r   )r   r         r  r   r   )r   r   g      @r   r   r   r   )g      ?r   r   r   r  g      @)g     ,@g      r   r   r  r   )r   g      @r   r   r   r   )g     2@      r   r   r   r   r   )g      ?r   r   r   r@  g      )r       @r   r   r   g      @)r   r  r   r   r   r   )r  r   r   r   r   r      rJ   )
r   _TestArithmetic__A_TestArithmetic__Br+  r   rd   r&  r   _TestArithmetic__Asp_TestArithmetic__Bspr   r/   r/   r0   __arith_init  s4     z_TestArithmetic.__arith_initc           	   
   C   s  |    t| j| j  | j| j  tD ]}tj	dd | j
|}W d    n1 s.w   Y  | |}tD ]}t|tjsatj	dd | jj
|}W d    n1 s[w   Y  n| j
|}| |}|| }|| }t|j|j t| | t|| | t|| | td||fv rq:|| }|| }t|j|j t| | t|| | t|| | q:qd S )Nr   r   r   )_TestArithmetic__arith_initr   r  r  r   r  r  r#   r<   r   rd   r   r\   r  r&  r   r3   	r   r4   rC   r  r5   rD   r9  D1S1r/   r/   r0   test_add_sub  sB   

z_TestArithmetic.test_add_subc           	   
   C   s$  |    t| j| jj  | j| jj  tD ]x}t	j
dd | j|}W d    n1 s0w   Y  | |}tD ]R}t	|t	jrL| j|}nt	j
dd | jj|}W d    n1 sdw   Y  | |}||j }||j }t| |dt|  d t|j|j q<qd S )Nr   r   g+=)atol)r  r   r  r  r   r   r  r  r#   r<   r   rd   r   r\   r  r&  r   r  rI   r   r3   r  r/   r/   r0   test_mu  s0   




z_TestArithmetic.test_muN)r   r   r   r  r  r  r  r/   r/   r/   r0   r    s
    +r  c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )_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 )NrO  r  r   r  r      r   iir   rG   r   rV   r4  r   rG   rG   r   )r<   r   r   rJ   rW   r   r   rV  r   r   r^   rI   r3   r   r  r   r   )r   r3   r(  r  rl  r/   r/   r0   test_minmax  sD   



 
z_TestMinMax.test_minmaxc                 C   s|  t ddd}d|dd d f< d|d d df< d|d< d|d	< | |}g d
}|D ]"}t|j|d |j|dd t|j|d |j|dd q,t dddd}| |}|D ]"}t|j|d |j|dd t|j|d |j|dd q`t d}| |}|D ]"}t|j|d |j|dd t|j|d |j|dd qddg}ddg}t d}| |}|D ]}t	t
|j|d t	t
|j|d q|D ]}tt d|j|d  tt d|j|d  qt d}| |}|D ]}t	t
|j|d t	t
|j|d q|D ]}tt d|j|d  tt d|j|d  qd S )Nr  r   rG   r   r   rC  r   r   r  r   r   r   r   r  Tr  3   )rG   r   r   r  r  r  re  )r<   r   rV  r   r   rI   r   r^   r   r   r   )r   r(  r  r  r  	axes_evenaxes_oddr/   r/   r0   test_minmax_axisL  sf   







 z_TestMinMax.test_minmax_axisc           	      C   s2  t tdddtd}d|dd d f< d|d d df< d|d< d	|d
< tj|d< tj|d< | |}| }t|s?J |t|ksHJ |	 }t|sSJ |t	|ks\J g d}|D ]4}|j|d}t
|tsqJ t| tj||d |j	|d}t
|tsJ t| tj	||d qbd S )Nr  r   rG   r  r   r   rC  r   r   r  r{  )r   r  r  r  )r'   r<   r   rV  r  r   r   nanmaxr  nanminr;   r   r   r   )	r   r(  r  X_nan_maximumX_nan_minimumr  r  X_nan_maximaX_nan_minimar/   r/   r0   test_nanminmax  s6   


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  )r^   rI   r   r  r  r  r   r  )r   r   ru   r   r   rW  )r   r   r   fnamerw   r/   r/   r0   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   r;   _minmax_mixinr   r<   r^   rI   )r   r  r   r   r/   r/   r0   test_numpy_minmax  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 ]j}| |}t||jsWqIt|	 t	| t|
 t
| t|j	ddttj	|dd t|j
ddttj
|dd t|j	ddttj	|dddd t|j
ddttj
|dddd qItd}td}dD ]}	| |}tt|j	|	d tt|j
|	d qdD ]}	| |}tt|j	|	d tt|j
|	d qd S )Nr   r  )r   r   rV   r   )r   r   r   r   )r   r   r  r  r0  )r   rV   r   r   r  r   rA  r   )r   r   r   )r  rC  rG   )r   r  rC  r  r   r   r6  ri  rZ   )Nr   )r  r  r<   r   r
   r   r;   r  r   argmaxargminr&   rV  r8  r   r   )
r   r  r  D2D3D4D5r(  r   r  r/   r/   r0   test_argmax  sR   




z_TestMinMax.test_argmaxN)	r   r   r   r  r  r  r  r  r  r/   r/   r/   r0   r    s    /Ar  c                   @   r  )_TestGetNnzAxisc                 C   s2  t ddgddgddgg}|t}| |}tjtjf}t|jd d|j	d d t| |	  t|jdd|j	dd t
|j	ddj| t|jdd|j	dd t
|j	ddj| t|jd	d|j	d	d t
|j	d	dj| t|jd
d|j	d
d t
|j	d
dj| tt|j	dd d S )Nr   rV   r   r   r  rC  r  r   r   r   )r   rd   r   r   r<   rJ   rW   r   r  getnnzr1   r3   r   r   )r   r   bool_datr   accepted_return_dtypesr/   r/   r0   test_getnnz_axis  s$   

z _TestGetNnzAxis.test_getnnz_axisN)r   r   r   r  r/   r/   r/   r0   r    r  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 )Nr1  )r  rW  r   r  AttributeErrorr   r   )r@   rx   fcr/   r0   wrapper  s   

z6_possibly_unimplemented.<locals>.wrap.<locals>.wrapper)	functoolswraps)r  r  r/   r  r0   wrap  s   z%_possibly_unimplemented.<locals>.wraptest_NotImplemented)dictr9   r  
startswithr|  r   	__bases__)r   requirer  new_dictr|   rw   r/   r/   r0   _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rStd|j||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 {} overloads test {} defined in {}TestBase)r   r  r  r  r  r  r  rH  r[  r~  r  r  r  r  r9   r  getr   r  r   r|  )getsetslicingslicing_assignfancy_indexingfancy_assignfancy_multidim_indexingfancy_multidim_assignminmaxnnz_axisbasesnamesr   r|   old_clsr/   r/   r0   sparse_test_class1  sB   




	r  c                   @   s   e Zd Zedd Zejejejej	gZ
dd Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%S )&r   c                 O   D   t  }|td t|i |W  d    S 1 sw   Y  d S )Nz<Changing the sparsity structure of a csr_matrix is expensive)r   r   r"   r   r   argsr6   r   r/   r/   r0   r   ^     $zTestCSR.spcreatorc                 C   s   t g dg dg dgd}t|}t|jg d t|jg d t|jg d t| d t|	 d	 t|
 | d S )
N)r   r  r   r_  r   r   )r  r   rV   rv  rW  r   r  )r   r   r   r  r   r	  r
  r   r  	getformatr   r   rE   rv  r/   r/   r0   test_constructor1f  s   zTestCSR.test_constructor1c                 C   sX   t dd}d|d< t|}t|jdg t|jdg t|jg d t| | d S )Nr@  r@  r   r   rT  r  )r   r   r   r   r   r   r   )r   r   r   r  r   r	  r
  r   r  r/   r/   r0   test_constructor2r  s   
zTestCSR.test_constructor2c                 C   sf   t ddgddgddggd}t|}t|jg d t|jg d t|jg d t| | d S )	Nr   r   rV   r   r   r>  r`  rW  )r   r   r   r  r   r	  r
  r   r  r/   r/   r0   test_constructor3{  s   zTestCSR.test_constructor3c                 C   s   t g d}t g d}t g d}t||f}t||fd}ttddd|  tdd	gd
d	gd
d	gfftjd}t dd
gd
d	ggtjd}t||  d S NrV   r   r   r   r   r   r   r   rV   r   rV   r   r   r   r   r   r   rV   rV   rV   rV   r   g      @g      $@r  g      "@r  r  g      &@r  g       @g      @r  r  rI  r  r   l           r   r   r  )	r   r   r   r   r   rV  r   r<   uint64)r   r  r  r  r}  r  r  r/   r/   r0   test_constructor4  s   "zTestCSR.test_constructor4c                 C   B   t g d}t g d}t g d}t|||f}t|jd d S Nr   r   r   r   r   r   r   rV   r0  ru  )r   r   r   r   r   r
  r	  r  r  r/   r/   r0   test_constructor5  
   zTestCSR.test_constructor5c                 C   J   g d}g d}g d}t |||f}t|jd tt|jtj d S r	  )r   r   r   r   r<   r\   r3   signedintegerr  r/   r/   r0   test_constructor6     zTestCSR.test_constructor6c                 C   s   t dd }tg dtjd}tg dtjd}t|||fdd}tg dg d	g d
gd}t|jjttj t|j	jttj t
| | d S )Nr@  r   )r   rV   r   r   r   rV   r  r   rV   r  r@  r   r   r  r  )r   r   r@  r   )r   r   r<   rW   r   r   r
  r3   rJ   r	  r   r   )r   r  r  ptrr@   rE   r/   r/   r0   test_constructor_smallcol  s   z!TestCSR.test_constructor_smallcolc                 C   s   t dd }ttjjd }tddd||d |d gtjd}tg dtjd}t|||f}t|j	j
t
tj t|jj
t
tj t|jdt|d f d S )	Nr@  r   rS  r   rV   r  r  r   )r   r<   rH   rJ   rI   r   rW   r   r   r
  r3   r	  r   r   )r   r  larger  r  r@   r/   r/   r0   test_constructor_largecol  s   "z!TestCSR.test_constructor_largecolc                 C   sh   t d}tg d}tg d}t|||fdd}| }|  t|jg d t| |  d S )Nr   rA  rV   r   r   r  r   r   r   rV   rG   r  r   rV   rA  r  r   )r   r   r   r   r|  r   r	  r   r   r  r	  r
  ru  rv  r/   r/   r0   test_sort_indices  s   zTestCSR.test_sort_indicesc                 C   x   t g d}t g d}t g d}t|||fdd}| }|  t|jd t|jg d t| |  d S )Nr   r   r   r   rV   r   r   r   r   rV   r   r  r   r@  rA  rB  r   r   rB  r  r  r   r>  )r   r   r   eliminate_zerosr   r   r  r   r  r/   r/   r0   test_eliminate_zeros     zTestCSR.test_eliminate_zerosc                 C   s   t tdddd }dD ]3}ttt |d t|| }t|j|j t|j	|j	 t|j
|j
 t| tt||  qd S )NrO  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  T)r   r<   r   rV  r   r  ru   r   r   r	  r
  r   r   r  r  r  r/   r/   r0   test_ufuncs     zTestCSR.test_ufuncsc                 C      t d}tg d}tg d}t|||fdd}t d}tg d}tg d}t|||fdd}t||  | |   d S )	Nr   r  r  r  r  r@  rB  r   r   rA  rV   r  r   rV   r@  )r   r   r   r   r   r  r/   r/   r0   test_unsorted_arithmetic     "z TestCSR.test_unsorted_arithmeticc                 C   ~   t dgdgdgg}t g d}t jd tt jdd}| |}|||f }t|r4| }t	||||f  d S Nr   rV   r   r  rT   r   rA  
r<   r   r   rU   r&   r  r   r!   r   r   r   rb  rD  r(  r  rc  r/   r/   r0   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}t|||f }td|j t|jtks4J t|||f }td|j |  td|j t	|j
| t|||f }d|_td|j t	|j
| |  t	|j
| dS )z@Ensure has_sorted_indices memoizes sorted state for sort_indicesr   r   rV   TFN)r<   r   r   r   r   r{  r|  r   r|  r   r	  )r   sorted_indsunsorted_indsr  r
  r  r/   r/   r0   test_has_sorted_indices  s$   zTestCSR.test_has_sorted_indicesc                 C   s  t tdgtdgtddgf}td|j tddg}tddg}tddg}t |||f }td|j t|jtksGJ |  td|j tdt	|j
 t |||f }d|_td|j tdt	|j
 |  tdt	|j
 dS )z=Ensure has_canonical_format memoizes state for sum_duplicatesrV   r   r   TFN)r   r<   r   r   has_canonical_formatr   r|  r   sum_duplicatesr   r	  )r   r  r	  r  r
  r/   r/   r0   test_has_canonical_format  s"   (z!TestCSR.test_has_canonical_formatc                 C   s  t jdt jd}t jdt jd}t d}t|||fdd}t|||fdd}t jdt jd}t||fdd}t||fdd}td}	td}
t|jjt j t|jjt j t|jjt j t|jjt j t|	jjt j t|
jjt j |||||	|
fD ]}||  qd S )NrV   r  r   r   r  r           rr  )r<   r   rJ   r   r   r
  r3   rW   r   r
  r	  valsr@   rE   r}  r  r   r  r  r4   r/   r/   r0   test_scalar_idx_dtype6  &   

zTestCSR.test_scalar_idx_dtypec                 C   sB   t g d}t g d}|| jdksJ ||jdksJ d S )Nr`  r   r   r   rV   r   )r   r   r8  r   r@   rE   r/   r/   r0   test_binop_explicit_zerosN  s   z!TestCSR.test_binop_explicit_zerosN)r   r   r   r  r   r<   r
  r  r  r  r   r  r   r  r  r  r  r  r  r  r$  r(  r-  r3  r7  r:  rA  rE  r/   r/   r/   r0   r   ]  s*    
	
	
r   c                   @   s   e Zd Zedd Zejejejej	gZ
dd Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )r   c                 O   r  )Nz<Changing the sparsity structure of a csc_matrix is expensive)r   r   r"   r   r  r/   r/   r0   r   [  r  zTestCSC.spcreatorc                 C   s   t g dg dg dgd}t|}t|jg d t|jg d t|jg d t| d t|j	|j	 t|
 d	 d S )
Nr   r   r   r   rs  r   rV   r   r   r   )r   rV   r   r   )r   rV   r   rV   rw  r  r  )r   r   r   r  r   r	  r
  r   r  r   r  r  r/   r/   r0   r  c  s   zTestCSC.test_constructor1c                 C   sJ   t dd}d|d< t|}t|jdg t|jdg t|jg d d S )Nr  r   r   )rV   r  rV   )r   r   r   r   r   r   r   )r   r   r   r  r   r	  r
  r  r/   r/   r0   r   m  s   
zTestCSC.test_constructor2c                 C   sX   t ddgddgddggd}t|}t|jddg t|jddg t|jg d d S )Nr   r   rV   r   r  )r   r   r   r  r   r	  r
  r  r/   r/   r0   r  u  s
   zTestCSC.test_constructor3c                 C   s\   t g d}t g d}t g d}t||f}t||fd}ttddd|  d S )Nr  r  r  r  rI  r  r   )r   r   r   r   r   rV  r   )r   r  r  r  r}  r  r/   r/   r0   r  |  s   zTestCSC.test_constructor4c                 C   r  Nr
  r  r0  )r@  r   )r   r   r   r   r   r
  r	  r  r  r/   r/   r0   r    r  zTestCSC.test_constructor5c                 C   r  rH  )r   r   r   r   r<   r\   r3   r  rI  r/   r/   r0   r    r  zTestCSC.test_constructor6c                 C   r  )Nr   r!  r"  rG   rV   r  r   r>  )r   r   r   r#  r   r   r  r   r  r/   r/   r0   r$    r%  zTestCSC.test_eliminate_zerosc                 C   sd   t d}tg d}g d}t|||fdd}| }|  t|jg d t| |  d S )Nr   r  r  rJ  r  r  )r   r   r   r   r|  r   r	  r   )r   r  r  r  ru  rv  r/   r/   r0   r    s   zTestCSC.test_sort_indicesc                 C   s   t tdddd }dD ]3}ttt|d t|| }t|j|j t	|j
|j
 t	|j|j t	| tt||  qd S )N   rA  r   g      5@r&  T)r   r<   r   rV  r   r  r   ru   r   r   r	  r
  r   r'  r/   r/   r0   r(    r)  zTestCSC.test_ufuncsc                 C   r*  )	Nr   r  r  rJ  r  r@  r+  r,  )r   r   r   r   r   r  r/   r/   r0   r-    r.  z TestCSC.test_unsorted_arithmeticc                 C   r/  r0  r1  r2  r/   r/   r0   r3    r4  z%TestCSC.test_fancy_indexing_broadcastc                 C   s  t jdt jd}t jdt jd}t d}t|||fdd}t|||fdd}t jdt jd}t||fdd}t||fdd}td}	td	}
t|jjt j t|jjt j t|jjt j t|jjt j t|	jjt j t|
jjt j |||||	|
fD ]}||  qd S )
NrV   r  r   )r<  r   r  )r>  r   rr  r;  r=  )	r<   r   rJ   r   r   r   r
  r3   rW   r?  r/   r/   r0   rA    rB  zTestCSC.test_scalar_idx_dtypeN)r   r   r   r  r   r<   r
  r  r  r  r   r  r   r  r  r  r  r$  r  r(  r-  r3  rA  r/   r/   r/   r0   r   Z  s     


	
r   c                   @   sP   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zdd ZdS )r   c                 C   s>   t d}d|d< d|d< ||j }||j }t|j|j d S )NrG   rG   rG   r  rO  r   r@  )r   r   rC  r   rC   )r   rC   r(  rA  r/   r/   r0   	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  rO  rr  rG   r   rP  r  )r   r   r   r   ri  r/   r/   r0   test_add_nonzero  s   
zTestDOK.test_add_nonzeroc                 C   sR   |  d}d|d< d|d< t|d  | d  t|d  | d  d S )Nr  rO  r  rO  rr  r  rC  )r   r   r   r  r/   r/   r0   test_dok_divide_scalar  s
   
zTestDOK.test_dok_divide_scalarc                 C   s  d\}}t ||f}d|d< d|d< d|d< d|d	< d
|d< d|d< t| d d |d f t| | }t| d d |d f t| ||}}| }t|j||f t| |d d d f t| | }t| |d d d f t| d S )N)r@  rA  r   rK  rV   rq  r   r  r  rj  r   r  r@  r{  )	r   r   r   r   r  r
   r   r   r  )r   r	  r\  r@   r  rE   r  r/   r/   r0   test_convert  s"   ""
"&zTestDOK.test_convertc                 C   s   t tt tg dg dg dgd}t|}t|j|j t| | t|}t| |  g dg dg}t|tj	d}t|jtj	 | }t|jtj	 t
|| d S )NrF  rs  rG  r   r  r_  r  )r   rW  r   r   r   r3   r   r   r<   r   r   )r   rE   rC   r  r  r   dar/   r/   r0   	test_ctor,  s   
zTestDOK.test_ctorc                 C   sT   t d}d|d< td| vd t d}d|d d df< tt| dkd d S )Nr   r   r4  zUnexpected entry (0,0) in keyszUnexpected entries in keys)r   r   keysr   rD  r/   r/   r0   test_ticket1160A  s   zTestDOK.test_ticket1160N)r   r   r   r   r   r<   r  r  r  r   rN  rP  rQ  rR  rT  rV  r/   r/   r/   r0   r     s    r   )r  r  c                   @   s`   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zdd Zdd Zdd ZdS )TestLILc                 C   s   t dtj}d|d< d|d< tdtjd}d|d< d|d< t dkr0t||j ||j   t||	 j ||j
   d S )NrL  rG   r  y              4@rM  r  ppc64le)r   r<   r   r   platformmachiner   r   r   r   rC  ri  r/   r/   r0   test_dotV  s   "zTestLIL.test_dotc                 C   s@   t d}d|d< |d }t|d d |d }t|d d d S )Nr   rV   r4  r  r   )r   r   )r   r4   r/   r/   r0   test_scalar_mule  s   zTestLIL.test_scalar_mulc                 C   s   t g dg dg}t g dg dg}||| f||| fd|d fd}| D ]\}\}}| }t|d| | t| |  q*t dtdd	}tg d
}|dd d f  |7  < t|dd d f  	 | d S )Nr   rV   r   r(  r`  r   )addsubmulz__i%s__r  r   r  )皙?ra  ra  r   )
r   r  r   ru   r   r   r<   r3   r   squeeze)r   rC   rD   r  opotherr   r~  r/   r/   r0   test_inplace_opso  s   


"zTestLIL.test_inplace_opsc                 C   sL   g dg dg}t t|}t|D ]\}}t| t|| dd qd S )Nr>  r?  rV   )ndmin)r   r   r<  r   r   )r   row_datarD   rf  r  r/   r/   r0   test_lil_iteration  s
   zTestLIL.test_lil_iterationc                 C   sR   t d}d|d< d|d< d|d< d|d	< d
|d< | }t |}t|j|j d S )NrL  rG   r  rO  rM  rP  )rB  r   r3  )r   rB  r  )rB  rC  )r   r  r   rC   )r   rD   rG  r(  r/   r/   r0   test_lil_from_csr  s   zTestLIL.test_lil_from_csrc                 C   sV   t tddd}t|}t|tg dddf  |tg dddf  d S )Nr0  r   r>  rV   r   )r&   r   rV  r   r   r   r   )r   r  rC   r/   r/   r0   test_fancy_indexing_lil  s
   zTestLIL.test_fancy_indexing_lilc                 C   s   t d}d|d< d|d< d|d< d|d	< t d}d|d< d|d
< d|d< d|d	< d|d< t|| ||  t|| g dg dg dg dg d S )Nr  r   r4  rV   rd  r   r  r  r  r  r  r  r  r   r   rC  )r   r  r   )r   r   r8  r   )r   lr	  r/   r/   r0   test_point_wise_multiply  s*   z TestLIL.test_point_wise_multiplyc                 C   s*   t td}|d9 }d|dd d f< d S )Nr   r  r   )r   r<   r@  )r   r@   r/   r/   r0   test_lil_multiply_removal  s   z!TestLIL.test_lil_multiply_removalN)r   r   r   r   r   r<   r  r  r  r   r[  r\  re  rh  ri  rj  rm  rn  r/   r/   r/   r0   rW  R  s    
rW  )r  c                   @   s   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zejjddddd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )TestCOOc                 C   s   t g d}t g d}t g d}t|||ffd}ttddd|  tdd	gd
d	gd
d	gfftjd}t dd
gd
d	ggtjd}t||  d S r  )r   r   r   r   rV  r   r<   r  )r   r  r  r  r  r  r/   r/   r0   r    s   "zTestCOO.test_constructor1c                 C   sb   t g d}t g d}t g d}t|||ffd}t g dg dg dg}t||  d S )N)
r   r   rV   rV   rV   rV   r   r   rV   rV   )
r   rV   r   rV   r   r   r   r   r   rV   )
rV   rC  r  r   rA  r   r   rV   r   r  r   )r  r   r   rk  )r  rA  r   )r   r   r   r   )r   r  r  r  r  r   r/   r/   r0   r     s   zTestCOO.test_constructor2c                 C   sN   t d}t|jd t|jg  t|jg  t|jg  t| td d S )Nr  )r   r   r   r  r  r  r   r   r   r  r/   r/   r0   r    s   zTestCOO.test_constructor3c                 C   s   t g dg dg dg}t|}t| | t g d}t|}t| |dd tjtdd tg dg d	g d
f W d    n1 sLw   Y  tjtdd tg ddd W d    d S 1 slw   Y  d S )Nr   r   r   r   )rA  r   r   r   )r   r  r   r   r   r   zobject cannot be interpretedrD  )r   r*     !   rW  rM  zinconsistent shapesrp  r  )	r   r   r   r   rV  r   r   rW  r   )r   r   r  r/   r/   r0   r    s   "zTestCOO.test_constructor4c                 C   s8   dg}t |dgdgffd d}|jt|jksJ d S )Nr   r   r  )r   r3   r<   r   )r   r  r  r/   r/   r0   "test_constructor_data_ij_dtypeNone  s   z*TestCOO.test_constructor_data_ij_dtypeNoneFzCOO does not have a __getitem__runreasonc                 C      d S r2   r/   r   r/   r/   r0   r       zTestCOO.test_iteratorc                 C   s&   ddgg}t | }t|j| d S rZ   )r   todiar   rC   )r   r   r  r/   r/   r0   test_todia_all_zeros  s   
zTestCOO.test_todia_all_zerosc                 C   s   t d}|  t ddgddgddgff}|  t|jddgddgg t ddgddgddgff}|  t|jddgddgg t|jdg t|jdg t|jdg d S )Nr  r   rV   r   r   )r   r9  r   rC   r  r  r  rp  r/   r/   r0   test_sum_duplicates
  s   zTestCOO.test_sum_duplicatesc                 C   s6   t g dg dg dff}| }t|j|j d S )N)r   r   r   r   )r   rV   rV   r   )r   r   r   r   )r   r  r   rC   )r   r  r8   r/   r/   r0   test_todok_duplicates  s   zTestCOO.test_todok_duplicatesc                 C   sl   t g d}t g d}t g d}t|||ffdd}| }|  t|jdk  t|j|j d S )Nr   )r   r   r   r   r   r   r   r   r!  r  r  r   )	r   r   r   r#  r   r  allr   rC   )r   r  r  r  ru  rv  r/   r/   r0   r$    s   zTestCOO.test_eliminate_zerosc                 C   s   g dg dg dg}d}t |}||}t|j|ju  |j|dd}t|j|ju  |j|dd}tt|j|j  d S )NrL  rM  rN  rQ  FrU  T)r   rV  r   r  r<   rB   )r   r_   	new_shaper4   r5   r/   r/   r0   test_reshape_copy&  s   
zTestCOO.test_reshape_copyc                 C   sl   t dgdgdgffd}t dgdgdgffd}t|jddd|kjdk t|jdd	d|kjdk d S )
Nr   i- rR  )-   )r  r  rG  rJ  r   rH  )r   r   rV  r   )r   mat1mat2r/   r/   r0   test_large_dimensions_reshape4  s    z%TestCOO.test_large_dimensions_reshapeN)r   r   r   r   r   r<   r  r  r  r   r  r   r  r  rt  r   r  xfailr  r{  r|  r}  r$  r  r  r/   r/   r/   r0   ro    s     


ro  )r  r  r  r  r  c                   @   sv   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S )TestDIAc                 C   sf   t g dg dg dg dg}t g dgjddd}t g d	}tt||fd
d | d S )N)r   r   r   r   )r   rV   r   r  )r   rV   r   r   )r   r   r   r  r0  r   r   r  )r   r   rV   rp  r  )r   r<   repeatr   r   r   )r   r(  r  r  r/   r/   r0   r  I  s   zTestDIA.test_constructor1FzDIA does not have a __getitem__ru  c                 C   rx  r2   r/   r   r/   r/   r0   r  R  ry  zTestDIA.test_iteratorr   c                 C   s|   t td}t|jjtj |jddd t|jjtj t td}t|jjtj |jddd t|jjtj d S )Nr   )r   rV   r1  r  )	r   r<   r    r   r  r3   rJ   re  rW   r   r	  r/   r/   r0   test_setdiag_dtypeV  s   zTestDIA.test_setdiag_dtypezDIA stores extra zerosrw  c                 C   rx  r2   r/   r   r/   r/   r0   r  b  ry  zTestDIA.test_getnnz_axisc                 C   sH   t g dgdgfdd}| }t|  | t|  | d S )NrC  r   r{  r  )r   r   r   r  r  )r   r	  r   r/   r/   r0   test_convert_gh14555f  s   zTestDIA.test_convert_gh14555c                 C   sT   t ddgddgg }t|j|jf|j}tt|dk}|j	|ks(J d S )Nr   rV   r   r  r   )
r   r  r<   ravel_multi_indexr  r  r   r~  diffr8  )r   r	  	flat_indsinds_are_sortedr/   r/   r0   test_tocoo_gh10050m  s   zTestDIA.test_tocoo_gh10050N)r   r   r   r   r   r<   r  r  r  r   r  r   r  r  r  r   r  r   r  r  r  r/   r/   r/   r0   r  C  s    	


r  )r  r  r  r  r  r  r  c                   @   s   e Zd ZeZejejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zejjddddd Zejjddddd Zdd  Zejjdddd!d" Zejjed#d$d%d& Zd'S )(r   c                 C   s   t g d}t g d}td}t g dg dg|d< t g dg dg|d	< t g d
g dg|d< t g dg dg|d< tg dg dg dgg dg dg}t|||fdd}t| | t|||f}t| | d S N)r   rV   rV   r  )r   rV   rV   r   )r  rV   r   r  r  r   r  )r@  r   rG   r   )r   r  rB  )rI  r   rO  rV   )r   r   rG   )r5  r   r0  r   rV  rM  r  r@  rI  r  )r   r   r   r   r   r   )r   r
  r	  r  rC   r  r/   r/   r0   r    s(   



(zTestBSR.test_constructor1c                 C   sn  dD ]}t |}tt| | qt d}tt|dd | tt|dd | tg dg dg dgg d	g d
g}tt| | tt|dd | tt|dd | tt|dd | tt|dd | tt|dd | tt|dd | tt|dd | tg dg dg dgg d	g d
g}tt|dd | d S )N)rd  rk  r   )rG   r  )r   rA  rK  )r  r@  r  r  r  rV  rM  r  r  r  r  r  rd  rQ  )rV   rI  )r   rI  rq  )r   r   r   r   r   )r   r   rC   r/   r/   r0   r     s"   ((zTestBSR.test_constructor2c                 C   sF   g dg dg dff}t ddgddgg}tt|dd	 | d S )
Nr>  rw  r.  r   r   rV   r   r  r  )r   r   r   r   )r   argrC   r/   r/   r0   r    s   zTestBSR.test_constructor3c                 C   sZ   d}t j||dft jd}t jd|gt jd}t j|t jd}t|||f|dfdd d S )NrB  r   r  r   F)r  r   )r<   r@  r   r   rJ   r   r   )r   r\  r  r
  r	  r/   r/   r0   r    s
   zTestBSR.test_constructor4c                 C   s   d}t |}t |||f}t d|g}t |}tt t|||f W d    n1 s1w   Y  tt t|||fdd W d    n1 sNw   Y  tt t|||fdd W d    d S 1 slw   Y  d S )NrB  r   rW  r  rd  )r<   r@  r   r   r   r   r   )r   r\  	data_1dimr  r
  r	  r/   r/   r0   r    s   




"zTestBSR.test_constructor5c                 C   sl   dgdggdgdggg}t jddgt jd}t jddgt jd}t|||fdd}|jt |jks4J d S )Nr   r   rV   r  rK  r  )r<   r   rJ   r   r3   )r   r:   r
  r	  rE   r/   r/   r0   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}t|||fdd}| }|  }t| | t| |  d S r  )r   r   r   r   r  r  r   r   )r   r
  r	  r  rC   AbsrAcsrAcsr_via_coor/   r/   r0   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}t|||fdd}| }|  t|jd	 t|	 |	  d S )
Nr   r   r   rV   r!  r"  )r  rO  r  rI  )
r   r   rV  r   r   r   r#  r   r   r   r  r/   r/   r0   r$    s   zTestBSR.test_eliminate_zerosc                 C   s   t jd tt jddd}d|j|jdk< |  t|jd t|jj	d d|j|jdk< |  t|jd t|jj	d	 t|
 t d |  t|jd t|jj	d	 t|
 t d d S )
Nr   )rI  rI  r  r  g?B   )r*  rV   r   r  r]  )r<   r   rU   r   r  r#  r   r   r   r   r   r   r  r/   r/   r0   test_eliminate_zeros_all_zero  s   z%TestBSR.test_eliminate_zeros_all_zeroc                 C   sH   t tddddd}t|jd dd}t|| | |  d S )Nx   rB  r5  r  r   r  r   r   r   r   rV  r   r   r   rY  r/   r/   r0   test_bsr_matvec  s   zTestBSR.test_bsr_matvecc                 C   sL   t tddddd}t|jd d dd}t|| | |  d S )	Nr  rB  r5  r  r  r   r@  r   r  rY  r/   r/   r0   test_bsr_matvecs  s   zTestBSR.test_bsr_matvecsFzBSR does not have a __getitem__ru  c                 C   rx  r2   r/   r   r/   r/   r0   r    ry  zTestBSR.test_iteratorzBSR does not have a __setitem__c                 C   rx  r2   r/   r   r/   r/   r0   ru  !  ry  zTestBSR.test_setdiagc                 C   s   t g dg dg dg}| j|dd}t|dd u  t|jddgd	dgd
dgg |d t|jddgd	dgg |d t|jddgd	dgddgg |d t|jg dg dg dg tt|jd d S )Nr  r  r  r  r  r  r   r   rV   r   r  rT  rF  rM  r  )	r<   r   r   r   r  r   rC   r   r   r  r/   r/   r0   test_resize_blocked%  s2   



zTestBSR.test_resize_blockedc                 C   rx  r2   r/   r   r/   r/   r0   ro  <  ry  z"TestBSR.test_setdiag_comprehensivezexceeds memory limitr  c              	   C   s<  t jdt jd}t jdt jd}t d}t|||fdd}t|||fdd}td}td}t|jjt j t|jjt j t|jjt j t|jjt j z.t d}t d	}	t|||fdd}
t|	||fdd}t|
jjt j t|jjt j W n tt	fy   d}
d}Y nw |||||
|fD ]}||  qd S )
NrV   r  r   rw  r;  r  r=  )r   r   r<  )r   r   r>  )
r<   r   rJ   r   r   r
  r3   rW   MemoryErrorr   )r   r
  r	  r@  r@   rE   r  r   vals2vals3r  r  r4   r/   r/   r0   rA  @  s2   



zTestBSR.test_scalar_idx_dtypeN)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  ru  r  ro  skipifIS_COLABrA  r/   r/   r/   r0   r   x  s.    	


r   )r  r  r  r  r  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   rV   r  r   c                 s   s    | ]}|d  V  qdS r?  r/   )r|  pr/   r/   r0   	<genexpr>{  s    z&_same_sum_duplicate.<locals>.<genexpr>c                 s   s    | ]}| d V  qdS )rV   N)r  )r|  r	  r/   r/   r0   r    s    )
popr<   r\   r3   r
  unsignedintegerr  r  r[   rz  )r  indsr6   r
  	zeros_pospospos1pos2r/   r/   r0   _same_sum_duplicateh  s*   

r  c                       s`   e Zd Zd fdd	Zejjdddd Zejjddd	d
 Zejjdddd Z	  Z
S )_NonCanonicalMixinFc                    s  t  j}||fi |}|jdk }|d jdk}|rK|d jd }t }	|	td | ||d | |d | }W d   n1 sFw   Y  | 	||}
d|vrZ|j
|d< ||
fi |}|jtjtjfv rnd}nd}t|j|j|d	 |rt|jdk  |S )
zcReplace D with a non-canonical equivalent: containing
        duplicate elements and explicit zerosr   rV   ra  r   Nr   gh㈵>gHz>)rtol)superr   rC   r  r[   r   r   r"   _insert_explicit_zero_arg1_for_noncanonicalr   r3   r<   r   r   r   r   r  any)r   r(  sorted_indicesr6   	constructr  zero_pos	has_zerosr2  r   arg1NCr  r  r/   r0   r     s.    
z_NonCanonicalMixin.spcreatorz"bool(matrix) counts explicit zerosr  c                 C   rx  r2   r/   r   r/   r/   r0   r     ry  z_NonCanonicalMixin.test_boolz!getnnz-axis counts explicit zerosc                 C   rx  r2   r/   r   r/   r/   r0   r    ry  z#_NonCanonicalMixin.test_getnnz_axisznnz counts explicit zerosc                 C   rx  r2   r/   r   r/   r/   r0   r     ry  z_NonCanonicalMixin.test_emptyF)r   r   r   r   r   r  r   r   r  r   __classcell__r/   r/   r  r0   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stopr/   r/   r0   r    s   
"$
z3_NonCanonicalCompressedMixin._arg1_for_noncanonicalc                 C   s   d|||f< |S rZ   r/   r   r  r]  r^  r/   r/   r0   r    s   z2_NonCanonicalCompressedMixin._insert_explicit_zeroNr  )r   r   r   r  r  r/   r/   r/   r0   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  rW  r  )	r3   r  r(  rC   r  r  r]  r^  r}  r   r/   r0   r     s    
z3_NonCanonicalCSMixin.test_getelement.<locals>.check)FTr  )r   r   r3   r  r/   r   r0   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   r>  r   ra  rV   )
r<   r    r   r   r   r   r"   r   rp  r   )r   r(  rC   rD   r   r/   r/   r0   test_setitem_sparse  s&   

z(_NonCanonicalCSMixin.test_setitem_sparseFz(inverse broken with non-canonical matrixru  c                 C   rx  r2   r/   r   r/   r/   r0   r    ry  z_NonCanonicalCSMixin.test_invz&solve broken with non-canonical matrixc                 C   rx  r2   r/   r   r/   r/   r0   r    ry  z_NonCanonicalCSMixin.test_solveN)
r   r   r   r  r  r   r  r  r  r  r/   r/   r/   r0   r    s    
r  c                   @      e Zd ZdS )TestCSRNonCanonicalNr   r   r   r/   r/   r/   r0   r        r  c                   @   r  )TestCSCNonCanonicalNr  r/   r/   r/   r0   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  )r  r  r  )r   r  r]  r^  r4   r/   r/   r0   r    s   z)TestBSRNonCanonical._insert_explicit_zeroFz&diagonal broken with non-canonical BSRru  c                 C   rx  r2   r/   r   r/   r/   r0   r=    ry  z!TestBSRNonCanonical.test_diagonalz"expm broken with non-canonical BSRc                 C   rx  r2   r/   r   r/   r/   r0   r    ry  zTestBSRNonCanonical.test_expmN)	r   r   r   r  r   r  r  r=  r  r/   r/   r/   r0   r    s    
r  c                   @   s&   e Zd ZdddZdd Zdd ZdS )	TestCOONonCanonicalNc                 C   s$   t |j|j|j\}}}|||ffS )r  )r  r  r  r  )r   r  r  r  r  r  r/   r/   r0   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 rZ   )r<   r_r  r3   r|  r  r  r  r/   r/   r0   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   rV   r   r1  r   )	r   r<   r    r9  re  r   r~  r  r  r  r/   r/   r0   test_setdiag_noncanonical"  s
   z-TestCOONonCanonical.test_setdiag_noncanonicalr2   )r   r   r   r  r  r  r/   r/   r/   r0   r    s    
r  c            
      c   s
   t ttttttg} dddddddd}| D ]l}tt|D ]c}t	||}|
drt	|d	d
sg }||}t|rE|tjj|dg7 }ttjtdkrft	|dg }|D ]}|jdv rd|| qXndD ]}	t||	rw|t	||	g7 }qhtj|||dV  qqd S )Nz%expm for 64-bit indices not availablez)linsolve for 64-bit indices not availableztest implemented in base classz%test actually requires 64-bit to workztest verifies int32 indexesztest verifies int64 indexes)r  r  r  rA  r  r  r  r  r  Fr  z3.6.0
pytestmark)r  r   r  xslow)marks)r   ro  r   r   r  r   rW  sorteddirru   r  r  r   r   r  r   r   parse__version__Versionr|   r>   r  param)
TEST_CLASSES
SKIP_TESTSr   method_namemethodr  r,   markersr  mnamer/   r/   r0   cases_64bit*  sJ   








r  c                   @   s   e Zd ZeeeeegZdd Z	dd Z
dd Zdd Zd	d
 Zejde dd Zejde dd Zejde dd Zejde dd Zejde dd Zdd ZdS )	Test64Bitc                 C   s   |t j||S r2   )r<   r   r  )r   mat_clsr	  r\  r/   r/   r0   _create_some_matrixV  s   zTest64Bit._create_some_matrixc                 C   sz   t |}t|tttfr|jj|ko|jj|kS t|tr*|j	j|ko)|j
j|kS t|tr5|jj|kS td|d)Nzmatrix z has no integer indices)r<   r3   r;   r   r   r   r	  r
  r   r  r  r   r  r   )r   r	  r3   r/   r/   r0   _compare_index_dtypeY  s   


zTest64Bit._compare_index_dtypec                    .   t dd fdd} jD ]}|| qd S )NrG   ra   c                    sL   | t jdd}t |t j | t jdd}t |t j d S )NrG   r   r*  )r<   r   r  r   r  rJ   rW   )r  r	  r   r/   r0   r   g  s   z4Test64Bit.test_decorator_maxval_limit.<locals>.checkr   MAT_CLASSESr   r   r  r/   r   r0   test_decorator_maxval_limitd  s
   

z%Test64Bit.test_decorator_maxval_limitc                    r  )NTr   c                    s^   d}d}t dD ]"} | dd}|p |tj}|p" |tj}|r*|r* d S qtd)NFrS  rC  z#both 32 and 64 bit indices not seen)r   r  r  r<   rJ   rW   rc   )r  seen_32seen_64r2  r	  r   r/   r0   r   t  s   z5Test64Bit.test_decorator_maxval_random.<locals>.checkr  r  r/   r   r0   test_decorator_maxval_randomq  s
   

z&Test64Bit.test_decorator_maxval_randomc                 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  ru   r  )r   r  instancer/   r/   r0   r     s   


z*Test64Bit._check_resiliency.<locals>.checkr/   )r   )r   r   r  rx   r   r/   r/   r0   _check_resiliency  s   

zTest64Bit._check_resiliencyzcls,method_namec                 C      | j ||dd d S )NrG   ra   r  r   r   r  r/   r/   r0   test_resiliency_limit_10     z"Test64Bit.test_resiliency_limit_10c                 C   r  )NTr  r  r  r/   r/   r0   test_resiliency_random  s   z Test64Bit.test_resiliency_randomc                 C      | j ||tjd d S NrQ   )r  r<   rJ   r  r/   r/   r0   test_resiliency_all_32     z Test64Bit.test_resiliency_all_32c                 C   r  r  )r  r<   rW   r  r/   r/   r0   test_resiliency_all_64  r  z Test64Bit.test_resiliency_all_64c                 C   r  )NT)r   r  r  r/   r/   r0   
test_no_64  r  zTest64Bit.test_no_64c                 C   s:   t tjdddd }t tjddd }|  |  d S )Nr   )rR   rf   c                  S   s   t ddgddgddgg} tt| jdd tt| jdd tg d	g d
g} tt| jdd tg d	g dg} tt| jdd d S Nr   rV   r   r  r   r@  r  r   r>  )r   r  r@  r  )r   r   rc   r  r  r   r   r   r/   r/   r0   check_limited  s   z3Test64Bit.test_downcast_intp.<locals>.check_limitedrQ   c                  S   sv   t ddgddgddgg} | jdd | jdd tg d	g d
g} | jdd tg d	g dg} | jdd d S r  )r   r  r  r   r   r   r/   r/   r0   check_unlimited  s   z5Test64Bit.test_downcast_intp.<locals>.check_unlimited)r   r<   rW   )r   r  r   r/   r/   r0   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  parametrizer  r  r  r  r  r  r  r/   r/   r/   r0   r  S  s$    




r  r2   )NFNNF)T)	TTTTTTTTT)or  
contextlibr  ro  rY  r=  sys
scipy._libr   numpyr<   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   numpy.testingr   r   r   r   r   r   r   r   r   r   scipy.linalgri   r  rj   r   r   r   r   r   r   r   r    r!   r"   scipy.sparse._sputilsr#   r$   r%   r&   r'   scipy.sparse.linalgr(   r)   r*   scipy._lib.decoratorr+   rz   r  r1   r7   	frozensetr  rF   r   r   r   r   r   r   r   r  r  r  r  rH  r[  contextmanagerr}  r~  r  r  r  r  r  r  r  r   r   r   r   rW  ro  r  r   r  r  r  r  r  r  r  r  r  r  r/   r/   r/   r0   <module>   s   @$0




Q,              ygj f  u
q#ca ^

, { bi 2 j!42)