
     h`                    
   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@dZdZAd ZB eCdg          ZDd ZE e!            ZFeFG                    e           	 	 d[dZHd ZI G d d          ZJ G d d          ZK G d d          ZL G d d          ZM G d d          ZN G d d          ZO G d d           ZP G d! d"          ZQ G d# d$          ZRejS        d%             ZT G d& d'          ZU G d( d)          ZV G d* d+          ZW G d, d-          ZX G d. d/          ZY G d0 d1          ZZd\d3Z[	 	 	 	 d]d4Z\ G d5 d6 e\                      Z]e]^                                  G d7 d8 e\                      Z_e_^                                  G d9 d: e\dd;                    Z`e`^                                  G d< d= e\d>                    Zaea^                                  G d? d@ e\dddddA                    Zbeb^                                  G dB dC e\dddddddD                    Zcec^                                  G dE dF e\ddddddG                    Zded^                                 dH Ze G dI dJ          Zf G dK dLef          Zg G dM dNeg          Zh G dO dPehe]          Zi G dQ dRehe_          Zj G dS dTeged          Zk G dU dVefeb          ZldW Zm G dX dY          ZndS )^z Test functions for sparse matrices. Each class in the "Matrix class
based tests" section become subclasses of the classes in the "Generic
tests" section. This is done by the functions in the "Tailored base
class for generic tests" section.

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

csc_matrix
csr_matrix
dok_matrix
coo_matrix
lil_matrix
dia_matrix
bsr_matrixeye
isspmatrixSparseEfficiencyWarning)supported_dtypesisscalarlikeget_index_dtypeasmatrixmatrix)spluexpminv)	decoratorzgoogle.colabc                 >    t          | |v ||n| d|           d S )Nz not found in )msg)r   )member
collectionr.   s      X/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/sparse/tests/test_base.py	assert_inr2   1   s8    Fj S_ccZ`Z`Z`blblBmnnnnnn    c                 \    t          | j        |j        k               t          | |fi | d S N)r   dtyper   )xykwargss      r1   assert_array_equal_dtyper:   5   s7    AGqwq!&&v&&&&&r3   dokc                 v    d } ||           D ])} ||          D ]}t          j        ||          r  dS *dS )Nc                     g }| j                                         D ]=}t          |t          j        t          j        f          r|                    |           >|S r5   )__dict__values
isinstancenpr
   genericappend)r7   arraysas      r1   _underlying_arraysz3sparse_may_share_memory.<locals>._underlying_arrays?   sY     ""$$ 	! 	!A!bj"*566 !a   r3   TF)rA   may_share_memory)ABrF   rE   bs        r1   sparse_may_share_memoryrK   <   sv        ""  ##A&& 	 	A"1a(( ttt	 5r3   Fc                      t          j        d           nt          j                    |rddn8dfd	n/|r't           j                            d          dfd		nd fd
	fdt          fd            }|S )z
    Monkeypatch the maxval threshold at which scipy.sparse switches to
    64-bit index arrays, or make it (pseudo-)random.

    N
    Fc                    t          | ||          }t          t          j        |          j        t          j        t          j                  j                   t          |t          j        k    p|t          j        k               |S r5   )r&   r   rA   iinfomaxint32r   intc)rD   maxvalcheck_contentstps       r1   new_get_index_dtypez4with_64bit_maxval_limit.<locals>.new_get_index_dtypec   sa     @@B")28BH+=+=+ABBBB"(N3bBGm444Ir3   c                     S r5   rN   )rD   rT   rU   fixed_dtypes      r1   rW   z4with_64bit_maxval_limit.<locals>.new_get_index_dtypei   s	    r3     )seedc                 f    t           j        t           j        f                    d                   S )N   )rA   rR   int64randint)rD   rT   rU   counters      r1   rW   z4with_64bit_maxval_limit.<locals>.new_get_index_dtypen   s#    Hbh'(:(:;;r3   c                    t           j        }||k    rt           j        }| D ]}t          j        |          }|j        t           j        k    rt|rf|j        dk    r9t          j        |j        t           j                  r6|                                }|	                                }| k    r|k    rt           j        }|S Nr   )
rA   rR   r^   r   r6   size
issubdtypeintegerrQ   min)rD   rT   rU   r6   arrminvalmaxval_limits         r1   rW   z4with_64bit_maxval_limit.<locals>.new_get_index_dtypeq   s    HE!L((HE % %joo9rx''% 	)8q==$]39bjAA )%(WWYYF%(WWYYF%,666\;Q;Q (HELr3   c                     |                                  k    rt          d          |                     t          j                  S )Nzdowncast limited)rQ   AssertionErrorastyperA   intp)rg   downcast_maxvals    r1   new_downcast_intp_indexz8with_64bit_maxval_limit.<locals>.new_downcast_intp_index   s9    wwyy?**$%7888::bg&&&r3   c           
         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
}	 |D ]t}|                    |dt          |dd           f           t          |d
           8|                    |dt          |dd           f           t          |d	           u | |i ||D ]\  }}}|t          |||           S # |D ]\  }}}|t          |||           w xY w)Nr&   downcast_intp_index)scipysparse_bsr_coo_csc_csr_dia_dok_lil_sputils_compressed
_constructrC   getattrsetattr)funcrE   kwbackupmodulesmodnameoldfuncrn   ro   rW   s           r1   decoz%with_64bit_maxval_limit.<locals>.deco   s   <$el&79J<$el&79J<$el&;<+U\-DF	0 Q Qs$5&s,=tDDF G G G.0CDDD".MM3(=#*30Et#L#L#N O O OC!68OPPP4>b>>&, 0 0"T7&Cw///0f 0 0"T7&Cw///0s   'A>E E )rN   NF)rA   r^   randomRandomStater,   )	ri   r   rY   rn   assert_32bitr   r`   ro   rW   s	   ` ``  @@@r1   with_64bit_maxval_limitr   T   s4    x|| x-- "	 	 	 	 	
 
	 	 	 	 	 	 	 		 )''T'22	< 	< 	< 	< 	< 	< 	<	 	 	 	 	 	* "	' 	' 	' 	' 	'
 0 0 0 0 0 0 Y0* Kr3   c                     t          | t          j                  st          |           r| S |                                 S r5   )r@   rA   r
   r%   toarrayrE   s    r1   r   r      s6    !RZ   LOO 99;;r3   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
BinopTesterc                     dS Nmatrix on the rightrN   selfmats     r1   __add__zBinopTester.__add__       $$r3   c                     dS r   rN   r   s     r1   __mul__zBinopTester.__mul__   r   r3   c                     dS r   rN   r   s     r1   __sub__zBinopTester.__sub__   r   r3   c                     dS Nmatrix on the leftrN   r   s     r1   __radd__zBinopTester.__radd__       ##r3   c                     dS r   rN   r   s     r1   __rmul__zBinopTester.__rmul__   r   r3   c                     dS r   rN   r   s     r1   __rsub__zBinopTester.__rsub__   r   r3   c                     dS r   rN   r   s     r1   
__matmul__zBinopTester.__matmul__   r   r3   c                     dS r   rN   r   s     r1   __rmatmul__zBinopTester.__rmatmul__   r   r3   N)__name__
__module____qualname__r   r   r   r   r   r   r   r   rN   r3   r1   r   r      s        % % %% % %% % %$ $ $$ $ $$ $ $% % %$ $ $ $ $r3   r   c                   P    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )BinopTester_with_shapec                     || _         d S r5   _shape)r   shapes     r1   __init__zBinopTester_with_shape.__init__   s    r3   c                     | j         S r5   r   r   s    r1   r   zBinopTester_with_shape.shape   s
    {r3   c                 *    t          | j                  S r5   )lenr   r   s    r1   ndimzBinopTester_with_shape.ndim   s    4;r3   c                     dS r   rN   r   s     r1   r   zBinopTester_with_shape.__add__   r   r3   c                     dS r   rN   r   s     r1   r   zBinopTester_with_shape.__mul__   r   r3   c                     dS r   rN   r   s     r1   r   zBinopTester_with_shape.__sub__   r   r3   c                     dS r   rN   r   s     r1   r   zBinopTester_with_shape.__radd__   r   r3   c                     dS r   rN   r   s     r1   r   zBinopTester_with_shape.__rmul__   r   r3   c                     dS r   rN   r   s     r1   r   zBinopTester_with_shape.__rsub__   r   r3   c                     dS r   rN   r   s     r1   r   z!BinopTester_with_shape.__matmul__   r   r3   c                     dS r   rN   r   s     r1   r   z"BinopTester_with_shape.__rmatmul__   r   r3   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   rN   r3   r1   r   r      s                 % % %% % %% % %$ $ $$ $ $$ $ $% % %$ $ $ $ $r3   r   c                      e Zd ZdZeZed             Zd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej         j!        d             Z"d Z#d Z$d Z%d Z&d Z'd  Z(d! Z)d" Z*d# Z+d$ Z,d% Z-d& Z.d' Z/d( Z0d) Z1d* Z2d+ Z3e4d,             Z5e4d-             Z6e4d.             Z7e4d/             Z8d0 Z9d1 Z:e4d2             Z;d3 Z<d4 Z=d5 Z>d6 Z?d7 Z@d8 ZAd9 ZBd: ZCd; ZDd< ZEd= ZFd> ZGd? ZHd@ ZIdA ZJdB ZKdC ZLdD ZMdE ZNdF ZOdG ZPdH ZQdI ZRdJ ZSdK ZTdL ZUdM ZVdN ZWdO ZXdP ZYdQ ZZdR Z[dS Z\dT Z]dU Z^dV Z_dWS )X_TestCommonz6test common functionality shared by all sparse formatsc                    t          g dg dg dgd          | _        |                     | j                  | _        t	          t
                                        | j                  | _        i | _	        i | _
        | j        D ]Y}| j                            |          | j	        |<   |                     | j                            |                    | j
        |<   Zt          | j        | j	        t          j                            t          | j                                        | j
        t          j                                                            d S )N)   r   r   r]   )   r   r   r   )r   r]   r   r   d)r   datspmatrixdatspsetr$   unionmath_dtypeschecked_dtypes
dat_dtypesdatsp_dtypesrl   r   rA   float64r   )clsr6   s     r1   
init_classz_TestCommon.init_class   s)    |||\\\BCHHLL))	 !!12288II' 	J 	JE$'GNN5$9$9CN5!&)ll37>>%3H3H&I&ICU## 	SWcnRZ8999SY&&((%bj199;;	= 	= 	= 	= 	=r3   c                       fd}t           t                    rt          j        d            j        D ]} ||           d S )Nc                     j         |          }t          t          t          |           t	                              dg                     t	                              dg                      d S )Nr   r   )r   assert_raises
ValueErrorboolr   r   )r6   r   r   s     r1   checkz$_TestCommon.test_bool.<locals>.check  sc    %e,E*dE222DMM1#&&'''qc***+++++r3   z%Cannot create a rank <= 2 DOK matrix.)r@   TestDOKpytestskipr   r   r   r6   s   `  r1   	test_boolz_TestCommon.test_bool  sm    	, 	, 	, 	, 	, dG$$ 	AK?@@@( 	 	EE%LLLL	 	r3   c                     t          ddgg          }|                     |          }t          d          D ]}||z   }||z   }t          ||                                           d S )NTFrM   )r   r   ranger   r   )r   r   r   _s       r1   test_bool_rolloverz_TestCommon.test_bool_rollover  so     dE]O$$c""r 	 	AEME)CC300000r3   c                 "    t                      }|                    t                     |t           fd                        }t	           t
          t          t          f          st          j	        d            j
        D ]} ||           d S )Nc                    	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   r:   r   rA   nan)
r6   r   r   dat2datsp2datbsrdatcsrdatcscdatlilr   s
            r1   r   z"_TestCommon.test_eq.<locals>.check)  s    /%(C%e,E88::DD1I]]4((F__F__F__F__F %SD[5F?2K2K2M2MNNN$SD[6V3C2L2L2N2NOOO$SD[6V3C2L2L2N2NOOO$SD[6V3C2L2L2N2NOOO$SD[6V3C2L2L2N2NOOO$SF]FcMBBB$SAX
/C/C/E/EFFF$SAX
/C/C/E/EFFF$SBF]&+rvo%>%>%@%@B B B B Br3   8Bool comparisons only implemented for BSR, CSC, and CSR.r   filterr#   sup_complexr@   TestBSRTestCSCTestCSRr   r   r   r   supr   r6   s   `   r1   test_eqz_TestCommon.test_eq%  s    !!

*+++			B 	B 	B 	B 
 
	B4 $'7 ;<< 	TKRSSS( 	 	EE%LLLL	 	r3   c                 "    t                      }|                    t                     |t           fd                        }t	           t
          t          t          f          st          j	        d            j
        D ]} ||           d S )Nc                    	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   r:   r   rA   r   )
r6   r   r   r   r   r   r   r   r   r   s
            r1   r   z"_TestCommon.test_ne.<locals>.checkN  s    /%(C%e,E88::DD1I]]4((F__F__F__F__F %SD[5F?2K2K2M2MNNN$SD[6V3C2L2L2N2NOOO$SD[6V3C2L2L2N2NOOO$SD[6V3C2L2L2N2NOOO$SD[6V3C2L2L2N2NOOO$SF]FcMBBB$SAX
/C/C/E/EFFF$SAX
/C/C/E/EFFF$Q#XU
/C/C/E/EFFF$Q#XU
/C/C/E/EFFF$SBF]&+rvo%>%>%@%@B B B B Br3   r   r   r   s   `   r1   test_nez_TestCommon.test_neJ  s    !!

*+++			B 	B 	B 	B 
 
	B8 $'7 ;<< 	TKRSSS( 	 	EE%LLLL	 	r3   c                 "    t                      }|                    t                     |t           fd                        }t	           t
          t          t          f          st          j	        d            j
        D ]} ||           d S )Nc                    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 ]j}t          j        |          }t          ||k                                     ||k                t          ||k                                     ||k                kt          j        d          5  t          |t          j        k                                     |t          j        k                d d d            n# 1 swxY w Y   j         |          }j        |          }|                                }d|d d df<                       |          }t          ||k     ||k                d S Nr         ?      ?)r]   r   r   ignoreinvalidr   r   r   r   rl   complexr    r   r   r   r:   r   rA   r^   errstater   r6   r   r   r   r   
datcomplexdatspcomplexr   r   r   r   valr   s               r1   r   z"_TestCommon.test_lt.<locals>.checku  s    /%(C%e,E88::DD1I]]4((FG,,J$JqqqsO==44L__F__F__F__F %S4Z%&.1I1I1K1KLLL$Z$%6&2V&;%D%D%F%FH H H %S4Z&6/1J1J1L1LMMM$S4Z&6/1J1J1L1LMMM$S4Z&6/1J1J1L1LMMM$S4Z&6/1J1J1L1LMMM$TCZ&6/1J1J1L1LMMM$TCZ&6/1J1J1L1LMMM$TCZ&6/1J1J1L1LMMM$TCZ&6/1J1J1L1LMMM$S4Z>>>$Z$%6t8KLLL( M Mhsmm(%#+)>)>)@)@#)LLL(#+)>)>)@)@#)LLLLX... 7 7(%"&.)A)A)C)C),rv7 7 77 7 7 7 7 7 7 7 7 7 7 7 7 7 7
 /%(C%e,E88::DD1I]]4((F %S6\54<@@@@@   ?M##M'*M'r   r   r   s   `   r1   test_ltz_TestCommon.test_ltq  s    !!

*+++		2	A 2	A 2	A 2	A 
 
2	Ah $'7 ;<< 	TKRSSS( 	 	EE%LLLL	 	r3   c                 "    t                      }|                    t                     |t           fd                        }t	           t
          t          t          f          st          j	        d            j
        D ]} ||           d S )Nc                    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 ]j}t          j        |          }t          ||k                                    ||k               t          ||k                                    ||k               kt          j        d          5  t          |t          j        k                                    |t          j        k               d d d            n# 1 swxY w Y   j         |          }j        |          }|                                }d|d d df<                       |          }t          ||k    ||k               d S r   r  r  s               r1   r   z"_TestCommon.test_gt.<locals>.check  s    /%(C%e,E88::DD1I]]4((FG,,J$JqqqsO==44L__F__F__F__F %S4Z%&.1I1I1K1KLLL$Z$%6&2V&;%D%D%F%FH H H %S4Z&6/1J1J1L1LMMM$S4Z&6/1J1J1L1LMMM$S4Z&6/1J1J1L1LMMM$S4Z&6/1J1J1L1LMMM$TCZ&6/1J1J1L1LMMM$TCZ&6/1J1J1L1LMMM$TCZ&6/1J1J1L1LMMM$TCZ&6/1J1J1L1LMMM$S4Z>>>$Z$%6t8KLLL( M Mhsmm(%#+)>)>)@)@#)LLL(#+)>)>)@)@#)LLLLX... 7 7(%"&.)A)A)C)C),rv7 7 77 7 7 7 7 7 7 7 7 7 7 7 7 7 7
 /%(C%e,E88::DD1I]]4((F %S6\54<@@@@@r
  r   r   r   s   `   r1   test_gtz_TestCommon.test_gt  s    !!

*+++		1	A 1	A 1	A 1	A 
 
1	Af $'7 ;<< 	TKRSSS( 	 	EE%LLLL	 	r3   c                 "    t                      }|                    t                     |t           fd                        }t	           t
          t          t          f          st          j	        d            j
        D ]} ||           d S )Nc                    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 ]j}t          j        |          }t          ||k                                    ||k               t          ||k                                    ||k               kj         |          }j        |          }|                                }d|d d df<                       |          }t          ||k    ||k               d S Nr   r   )r]   r   r   r   r   r   r   r   rl   r  r    r   r   r   r:   r   rA   r^   r  s               r1   r   z"_TestCommon.test_le.<locals>.check  1    /%(C%e,E88::DD1I]]4((FG,,J$JqqqsO==44L__F__F__F__F %SD[5F?2K2K2M2MNNN$Z4%7&2f&<%E%E%G%GI I I %f&6%?%?%A%A3$;OOO$f&6%?%?%A%A3$;OOO$f&6%?%?%A%A3$;OOO$f&6%?%?%A%A3$;OOO$f&6%?%?%A%A43;OOO$f&6%?%?%A%A43;OOO$f&6%?%?%A%A43;OOO$f&6%?%?%A%A43;OOO$Ud]C4K@@@$\T%9:;MNNN% O Ohsmm(%3,)?)?)A)A3#:NNN(#,)?)?)A)A3#:NNNN /%(C%e,E88::DD1I]]4((F %SF]ETMBBBBBr3   r   r   r   s   `   r1   test_lez_TestCommon.test_le      !!

*+++		-	C -	C -	C -	C 
 
-	C^ $'7 ;<< 	TKRSSS( 	 	EE%LLLL	 	r3   c                 "    t                      }|                    t                     |t           fd                        }t	           t
          t          t          f          st          j	        d            j
        D ]} ||           d S )Nc                    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 ]j}t          j        |          }t          ||k                                    ||k               t          ||k                                    ||k               kj         |          }j        |          }|                                }d|d d df<                       |          }t          ||k    ||k               d S r  r  r  s               r1   r   z"_TestCommon.test_ge.<locals>.check,  r  r3   r   r   r   s   `   r1   test_gez_TestCommon.test_ge(  r  r3   c                 D   t          |                     d                                          t          d                     t          |                     d          j        d           t          |                     d                                          d           d S )Nr   r   r   )r   r   r   r   nnzcount_nonzeror   s    r1   
test_emptyz_TestCommon.test_emptyb  s}    T]]6**2244eFmmDDDT]]6**.222T]]6**88::A>>>>>r3   c                    t          j        | j                                                  }t	          | j                                        |           t	          | j        j                                        |           d S r5   )rA   r  r   r   r   T)r   expecteds     r1   test_count_nonzeroz_TestCommon.test_count_nonzeroh  sd    #DJ$6$6$8$899TZ--//:::TZ\//118<<<<<r3   c                     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   s    r1   test_invalid_shapesz_TestCommon.test_invalid_shapesm  sD    j$-888j$-888j$-99999r3   c                 .    t          | j                   d S r5   )reprr   r   s    r1   	test_reprz_TestCommon.test_reprr  s    TZr3   c                 .    t          | j                   d S r5   )strr   r   s    r1   test_strz_TestCommon.test_stru  s    DJr3   c                 V   d}t          j        d          t          j        d          t          j        d          t          j        d          t          j        d          fD ]}|                     ||          }||z   }d|z  }||                                z  }||                                z  }||                                z  }||||||fD ]S}	t          |	j        |j        |j        z             t          |	j        |           t          |	j        j        |           Td S )	N   r/  rR   float32r   	complex64
complex128r6   r]   )rA   r6   r   tocsctocsrtocoor   rH   )
r   r   mytyperE   rJ   cr   efms
             r1   test_empty_arithmeticz!_TestCommon.test_empty_arithmeticx  s    x(("(9*=*=##RXk%:%:&&( 	/ 	/F e622AAAAAAGGIIAAGGIIAAGGIIA!Aa] / /QS!#ac'***QWV,,,QSYv....	/	/ 	/r3   c                     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   rH   s     r1   test_absz_TestCommon.test_abs  sf    ;;;


JJJ			BCHHSVVSq!1!122::<<=====r3   c                     d}t          ddgddggd          }t          t          j        ||          t	          |                     |          |                                                     d S )	Nr   ggQ?g     @1@gQr   )decimals)ndigits)r   r   rA   aroundroundr   r   )r   decimalrH   s      r1   
test_roundz_TestCommon.test_round  s}    E4=5%.1377RYq73334==++W===EEGG	I 	I 	I 	I 	Ir3   c                 J   t          g dg dg dgd          }t          t          j        |d          |                     |                              d                                                     t          t          |                     |          j        |           d S )N)rC  r   )r   r   r   r]   r      r   r]   )r   r   rA   powerr   r   r   NotImplementedErrorrF  s     r1   test_elementwise_powerz"_TestCommon.test_elementwise_power  s    <<<YYY7==RXa^^T]]1%5%5%;%;A%>%>%F%F%H%HIII 	)4==+;+;+A1EEEEEr3   c                 0   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@  rB  rD  r   )TFF)FFT)r   r   r   r   r   rT  __neg__rF  s     r1   test_negz_TestCommon.test_neg  s    ;;;


JJJ			BCHHaR4==+++4466777 ''')=)=)=>??)4==+;+;+CDDDDDr3   c                     t          ddgg          }|                     |          }t          |j                                        |j                   d S N      ?      @y       @      )r   r   r   realr   r   DrH   s      r1   	test_realz_TestCommon.test_real  L    FF#$%%MM!QV^^%%qv.....r3   c                     t          ddgg          }|                     |          }t          |j                                        |j                   d S rZ  )r   r   r   imagr   r]  s      r1   	test_imagz_TestCommon.test_imag  r`  r3   c           	      D   g }|                     g dg           |                     dgdgdgg           |                     ddgddgddgg           |                     g dg dg dg           |                     ddgddgg           |                     t          |d         ddgg                     |                     t          |d         dgdgg                     |                     t          |d         ddgdd	gg                     |                     t          |d         ddgdd	gg                     |                     t          |d         ddgdd	gg                     |                     t          |d         g d
g                     |D ]}t          |          j        \  }}|                     |          }t          | dz
  |dz             D ]5}t          |                    |          t          ||                     6t          |                    d          t          |d                     t          |                    d          t          |d                     t          |                     d                                          t          j
        d                     t          |                     d                                          t          j        d                     t          |                     d                                          t          j        d                     t          |                     d                              d          t          j        d                     d S )Nr   r   r]   r   r   r]   r   r   r   r   )r   r   r]   r   r   r   rR  r   r]   r   rR  krM   i)(   i?  rk  r   r   )   r   r   r/  )rC   r   r   r   r   r   r   diagonalr   rA   r   empty)r   matsr;  rowscols
sparse_matrj  s          r1   test_diagonalz_TestCommon.test_diagonal  sH   WWWIaS!aSM"""aUAa5!A'(((WWWWWWWWW-...aUAa5M"""Da1Q%))***Da1#qc++,,,Da1Q%1//000Da1Q%1//000Da1Q%1//000Da)))--... 	E 	EAqJD$q))JD57DF++ E EZ001055tA|||DDDD,,r,22DbMMMBBB,,s,33T!s^^^DDDD 	T]];//88::BHRLLIII 	T]]6**3355rx{{CCCT]]7++4466DDDT]]6**33B77!EEEEEr3   c                    t          j        g dg dg dg          }|                     |          }t          dd          D ]:}t	          |                    |          |                    |                     ;t          j        g dg dg          }|                     |          }t          dd          D ]:}t	          |                    |          |                    |                     ;d S )Nr   r]   r   rR  r/     )      	   r   r   )offsetr   )rA   r   r   r   r   trace)r   rH   rI   rj  s       r1   
test_tracez_TestCommon.test_trace  s    HiiiIII677MM!r1 	? 	?A**AGG1G,=,=>>>> Hiii+,,MM!r1 	? 	?A**AGG1G,=,=>>>>	? 	?r3   c           	         |                      g dg dg dg dg          }dD ]e}dD ]`}t          |                    ||                                          |                                                    ||                     af|                      g dg d	g d
g          }|                    d          }g dg dg}t          |j        |           |                    d          }t          |j        |           |                    d          }t          |j        |           t          t          |j        d           |                    dd          }t          |j        |           t          t          |j        ddd           |                    d          }t          ||u            |                    dd          }t          ||u           t          |j	        d           d|_	        t          |j        |           t          t          |j        |j
        f           t          t          |j        d|j
        df           d S )N)r   r   rz  rD  rg  )r   r   r/  )CF))   r   )r   r  orderr   rM   r   r   r   r   r   r   r         rk  r]   ry  )r   rM   r   r   r   r   )r   r   r   r  r  rk  r]   r   )r   ry  r%  r]   ry  r   )
not_an_argr   rR  Tr   )r   r   reshaper   rH   r   r   	TypeErrorr   r   rc   )r   r7   r  sr8   desireds         r1   test_reshapez_TestCommon.test_reshape  s[   MM999iiiIIIFGG 	H 	HE' H H"199Qe9#<#<#D#D#F#F#$99;;#6#6q#6#F#FH H H HH MM===,,,HIIIIf&&&(=(=(=>13((( IIg13(((IIg13(((j!)X666 IIaOO13(((iAqQ???? IIfQIIf4I((
 	17F+++ 13((( 	j!)afY777j!)a^<<<<<r3   c                 (   fdfd}t           j                            d           g d}t           j        t           j        fD ]}|D ]\  }}t          j        | dz   |dz
            }|D ]}t          ||||f          t          j        ||f|          }|                     ||f|          }	 |||	|           t           j        	                    |t          t          |          d                    D ]}
 |||	|
           Čd S )	Nc                    t          j        |          }|dk    rt          | j        d         | j        d         |z
            }|j        dk    r't          |t          |                    }|d |         }t          j        d|          }t          j        |||z             }|| ||f<   d S |dk     r | j        ||            d S d S r   )rA   r   rf   r   r   r   r   r  )rE   vrj  nijdense_setdiags         r1   r  z=_TestCommon.test_setdiag_comprehensive.<locals>.dense_setdiag	  s    
1AAvv
AGAJN336Q;;As1vvA"1"AIaOOIaQ''!A#Qac1qb))))) r3   c                 @   dt          t          j        | |                    ddfD ]t}|dk     r.t          j                            t          dd                    }n"t          j                            dd|          } | ||           t                      5 }|                    t          d           |
                    ||           d d d            n# 1 swxY w Y   t          j        | |          }t          j        |          j        dk    rt          ||d		|fz  
           nQt          t          |          t          |                    }t          |d |         |d |         d		|fz  
           t          |j        | d		|fz  
           vd S )Nr   r]   r  r   r   r  rc   ?Changing the sparsity structure of a cs[cr]_matrix is expensivez%s %derr_msg)r   rA   r   r   choicer   r_   r   r   r#   setdiagr   r   r   rf   rH   )
rE   rJ   rj  rr  r   r   r  r  r.   s
           r1   check_setdiagz=_TestCommon.test_setdiag_comprehensive.<locals>.check_setdiag  s    #bgamm,,a4 G Gq55	((q"66AA	))!Ra)88AaA&&&&(( $CJJ68yzzzIIaOOO$ $ $ $ $ $ $ $ $ $ $ $ $ $ $
 GAqMM:a==%**&q!WQx5GHHHHHCFFCFF++A&q!uaeWQx=OPPPP"137c1X3EFFFFF'G Gs   2CC	!C	rZ   )rn  r/  r   r   r/  r/  r   r.  r   r3  r/  r  )rA   r   r[   r   r   r   r(  r   r   r  rf   r   )r   r  shapesr6   r;  r  ksrj  rE   rJ   k2r  r.   s              @@r1   test_setdiag_comprehensivez&_TestCommon.test_setdiag_comprehensive  sv   	* 	* 	* 	* 	*	G 	G 	G 	G 	G 	G2 		t444grz* 	0 	0E 0 0!Yr!tQqS)) 	0 	0Aq!Q/00C!Qu555Aq!fE::A!M!Q*** !i..rCGGQ.HH 0 0%aB////0	00	0 	0r3   c           
      x   |                      t          j        d                    }|                      d          }g d}t                      5 }|                    t
          d           t          t          |j        |d           |                    |           t          |
                                |           |                    |d           t          |j        t          j        g dg d	g d
g                     |                    |d           t          |j        t          j        g dg d	g dg                     |                    dd           t          |j        d         d           |                    dd           t          |j        d         d           |                    dgd           t          |j        d         g d           |                    ddgd           t          |j        d d         g dg dg           d d d            d S # 1 swxY w Y   d S )Nr   rR  rR  )r   r]   r   r  rR  ri  r   )r   r   r   )r   r]   r]   rf  r   )r   r   r   )r|  r]   r   r]   r|  r]   r   r   r   r   r   r   )r   r   r   r   )r   rA   r!   r   r   r#   r   r   r  r   ro  rH   r   )r   r;  m2r?   r   s        r1   test_setdiagz_TestCommon.test_setdiag?  s   MM"&))$$]]6""   	9CJJ.XZ Z Z*ai1====IIfqzz||V444IIfI"""qsBHiii.7ii.7ii.9 %: %: ; ; ; IIfI###qsBHiii.7ii.7ii.9 %: %: ; ; ; IIdaI   qs3x+++IIdbI!!!qs3x+++JJsaJ   rtAw555JJ1vJ###rtBQBx,,,*6,,*8 9 9 9/	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   GH//H36H3c                 `   t          g dg dg dg          }|                     |          }t          d t          |                                          D                       }t          d t          |                                          D                       }t          ||           d S )Nr   r   r   r   r   r   rf  c                 ,    g | ]}t          |          S rN   tuple.0ijs     r1   
<listcomp>z,_TestCommon.test_nonzero.<locals>.<listcomp>b  s    ???"E"II???r3   c                 ,    g | ]}t          |          S rN   r  r  s     r1   r  z,_TestCommon.test_nonzero.<locals>.<listcomp>c  s    CCCBeBiiCCCr3   )r   r   r   r   nonzeror   r   rH   AspA_nzAsp_nzs        r1   test_nonzeroz_TestCommon.test_nonzero^  s    999YYYyyy122mmA??	!))++(>(>???@@CC)CKKMM*B*BCCCDDT6"""""r3   c                 `   t          g dg dg dg          }|                     |          }t          d t          t	          j        |                    D                       }t          d t          t	          j        |                    D                       }t          ||           d S )Nr  r  rf  c                 ,    g | ]}t          |          S rN   r  r  s     r1   r  z2_TestCommon.test_numpy_nonzero.<locals>.<listcomp>l  s    AAA"E"IIAAAr3   c                 ,    g | ]}t          |          S rN   r  r  s     r1   r  z2_TestCommon.test_numpy_nonzero.<locals>.<listcomp>m  s    EEEBeBiiEEEr3   )r   r   r   r   rA   r  r   r  s        r1   test_numpy_nonzeroz_TestCommon.test_numpy_nonzerog  s    999iii344mmAAA	"*Q--(@(@AAABBEE)BJsOO*D*DEEEFFT6"""""r3   c                 .   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   s    r1   test_getrowz_TestCommon.test_getrowq  s    4:,,Q//779948QCF;KLLL4:,,R0088::DHbT111W<MNNNNNr3   c                 .   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   s    r1   test_getcolz_TestCommon.test_getcolu  s    4:,,Q//779948AAAsF;KLLL4:,,R0088::DHQQQW<MNNNNNr3   c                    	 t           j                            d           t          g dg dg dg          }t           j                            dd          }t          j        g g          }t          j        d          }t          j        ddd          j        }|||||g		 fd	} j	        D ]-}t          t          	                    D ]} |||           .d S )
NrZ   r   r   r]   r   rC  r/  rz  r|  r/  )rk  rk  g{Gz?)densityc                    t          |         |           }                    ||           }t          j        d          5  t	          |                                |                                           t          |                                j        |                                j                   t          t          j	        |                    d                                t	          |                    d           |                    d                      t          |                    d           j        |                    d           j                   t	          |                    d          |                    d                     t          |                    d          j        |                    d          j                   t	          |                    d          |                    d                     t          |                    d          j        |                    d          j                   t	          |                    d          |                    d                     t          |                    d          j        |                    d          j                   t	          |                    d          |                    d                     t          |                    d          j        |                    d          j                   d d d            d S # 1 swxY w Y   d S )	Nr3  r   )overaxisr   r   r   r   )
r(   r   rA   r  r   sumr   r6   r   isscalar)r6   r  r   r   matricesr   s       r1   r   z#_TestCommon.test_sum.<locals>.check  s   !E222CMM#UM33E(+++ O O)#''))UYY[[AAASWWYY_eiikk.?@@@EII4I$8$899:::)#''t'*<*<*/)))*>*>@ @ @SWW$W//5"YYDY1179 9 9)#''q'//599!9;L;LMMMSWW!W__2EII1I4E4E4KLLL)#''q'//599!9;L;LMMMSWW!W__2EII1I4E4E4KLLL)#''r'*:*:EII2I<N<NOOOSWW"W--3UYYBY5G5G5MNNN)#''r'*:*:EII2I<N<NOOOSWW"W--3UYYBY5G5G5MNNNO O O O O O O O O O O O O O O O O Os   L
MM #M )rA   r   r[   r(   randr   r   rs   rH   r   r   r   )
r   dat_1dat_2dat_3dat_4dat_5r   r6   r  r  s
   `        @r1   test_sumz_TestCommon.test_sumy  s   
	t			"

"

$ % % 	q!$$"""Aq$///15%6	O 	O 	O 	O 	O 	O( ( 	  	 E3x==))    eQ 	  	 r3   c                 j   t          j        d          }t          g dg dg dg          }|                     |          }t	          t
          |j        d           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  out)rA   r   r   r   r   r   r  r  r   r  r   r   s       r1   test_sum_invalid_paramsz#_TestCommon.test_sum_invalid_params  s    hvYYYZZZZ! " " c""j%)!4444i8888i5555j%)!======r3   c                     t          g dg dg dg          |                               fd}| j        D ]} ||           d S )Nr  r  r  c                                          |           }                     |           }t          ||           t          |j        |j                   d S Nr3  meanr   r   r6   r6   dat_mean
datsp_meanr   r   s      r1   r   z)_TestCommon.test_sum_dtype.<locals>.check  T    xxex,,H%00J%h
;;;)9:::::r3   r   r   r   r   r   r6   r   r   s      @@r1   test_sum_dtypez_TestCommon.test_sum_dtype      YYYZZZZ! " " c""	; 	; 	; 	; 	; 	; ( 	 	EE%LLLL	 	r3   c                    t          g dg dg dg          }|                     |          }t          dgg          }t          dgg          }|                    |d           |                    |           t	          ||           t          j        d          }t          t          j        d                    }|                    d	|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   rA   r   r'   r   r   r   dat_out	datsp_outs        r1   test_sum_outz_TestCommon.test_sum_out  s    YYYZZZZ! " " c""!,,QC5MM	Gd+++		i	   !'9555(6""RXf--..	QGd333		qi	(((!'955555r3   c                    t          g dg dg dg          }|                     |          }t          j        |          }t          j        |          }t	          ||           t          |j        |j                   d S Nr  r  r  )r   r   rA   r  r   r   r6   r   r   r   r  r  s        r1   test_numpy_sumz_TestCommon.test_numpy_sum  s    YYYZZZZ! " " c""6#;;VE]]
!(J777X^Z%566666r3   c                 <      fd} j         D ]} ||           d S )Nc                    t          g dg dg dg|           }                    ||           }t          |                                |                                           t	          |                                j        |                                j                   t          t          j        |                    d                                t          |                    d d          |                    d                      t	          |                    d           j        |                    d           j                   t          |                    dd          |                    d                     t	          |                    d          j        |                    d          j                   t          |                    d	d          |                    d	                     t	          |                    d	          j        |                    d	          j                   t          |                    d
d          |                    d
                     t	          |                    d
          j        |                    d
          j                   t          |                    dd          |                    d                     t	          |                    d          j        |                    d          j                   d S )Nr  r   rR  r/  )ry  rz  r|  r3  r  Tr  r  r   r   r   r   )	r   r   r   r  r   r6   r   rA   r  r6   r   r   r   s      r1   r   z$_TestCommon.test_mean.<locals>.check  s   ""$+02 2 2C MM#UM33E%chhjj%**,,???)5::<<+=>>>BK


 5 566777%dT22EJJDJ4I4I   t,,2EJJDJ4I4I4OPPP%a$//1C1C   q))/1C1C1IJJJ%a$//1C1C   q))/1C1C1IJJJ%b400%**"*2E2E   r**0%**"*2E2E2KLLL%b400%**"*2E2E   r**0%**"*2E2E2KLLLLLr3   )r   r   s   `  r1   	test_meanz_TestCommon.test_mean  sN    	M 	M 	M 	M 	M< ( 	 	EE%LLLL	 	r3   c                    t          t          j        d                    }t          g dg dg dg          }|                     |          }t          t          |j        d           t          t          |j        d           t          t          |j        d           t          t          |j        d	|
           d S r  )	r'   rA   r   r   r   r   r   r  r  r  s       r1   test_mean_invalid_paramsz$_TestCommon.test_mean_invalid_params  s    rx''((YYYZZZZ! " " c""j%*15555i&9999i#6666j%*1#>>>>>>r3   c                     t          g dg dg dg          |                               fd}| j        D ]} ||           d S )Nr  r  r  c                                          |           }                     |           }t          ||           t          |j        |j                   d S r  r  r  s      r1   r   z*_TestCommon.test_mean_dtype.<locals>.check  r  r3   r  r  s      @@r1   test_mean_dtypez_TestCommon.test_mean_dtype  r  r3   c                    t          g dg dg dg          }|                     |          }t          dgg          }t          dgg          }|                    |d           |                    |           t	          ||           t          j        d          }t          t          j        d                    }|                    d	|d
           |                    d	|           t	          ||           d S r  )r   r   r(   r  r   rA   r   r  s        r1   test_mean_outz_TestCommon.test_mean_out  s    YYYZZZZ! " " c""!,,QC5MM	Wt,,,

y
!!!!'9555(6""28F++,,	aWt444

y
)))!'955555r3   c                    t          g dg dg dg          }|                     |          }t          j        |          }t          j        |          }t	          ||           t          |j        |j                   d S r  )r   r   rA   r  r   r   r6   r  s        r1   test_numpy_meanz_TestCommon.test_numpy_mean+  s    YYYZZZZ! " " c""73<<WU^^
!(J777X^Z%566666r3   c                 T   t          g dg dg dgt                    }|                     |dt                    }t          j                            |          }t          g dg dg dg          }|                     |dt                    }t          j                            |          }t                      5 }|                    t          d	           |                    t          d
           |                    t          d           t          |          	                                }t          |          	                                }	d d d            n# 1 swxY w Y   t          ||z
  t          d                     t          |	|z
  t          d                     d S )Nre  r   r   r   rC  r/  ry  r  r   r6   )      @              ?)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   rr   linalgr*   r   r   r#   r   r   r   )
r   MsMMexpNsNNexpr   sMexpsNexps
             r1   	test_expmz_TestCommon.test_expm8  s   999iii4e<<]]1E]77|  ##<<<|||<==]]1E]77|  ##   	'CJJ.?A A AJJ.\^ ^ ^JJ.GI I IHH$$&&EHH$$&&E	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	"54<%--@@@!54<%--@@@@@s   =BEE!$E!c                 >      fd}t           fD ]} ||           d S )Nc                 :   t          g dg dg dg|           }t                      5 }|                    t          d           |                    t          d           |                    t          d                               |d|           }t          |          }d d d            n# 1 swxY w Y   t          |                    |                                          t          j
        d	                     t          t          t
          |           d S )
Nre  r  r  r  r  r  r  r  r   )r   r   r   r#   r   r+   r   r   r   rA   r!   r   r  )r6   r"  r   r#  sMinvr   s        r1   r   z#_TestCommon.test_inv.<locals>.checkO  sJ   yyy)))ZZZ8%@@A"$$  

2KM M M

2`b b b

2CE E E]]1E]??B                              &eiimm&;&;&=&=rvayyIII)S!,,,,,s   A9B..B25B2)r   r   s   `  r1   test_invz_TestCommon.test_invN  sH    	- 	- 	- 	- 	- W 	 	EE%LLLL	 	r3   c                    t          g dg dg dg dg          }t          |                     |                                          |           t          g dg dg dg          }t          |                     |                                          |           t          |                     |d                                          |                    d                     d S 	Nr   r   r   rQ  )r   r/  r   rD  )r[  r   r   )r         @r   int16r3  )r   r   r   r   rl   rF  s     r1   test_from_arrayz_TestCommon.test_from_array_  s    7777777777773444==++3355q999###"??99   	4==++3355q9994=='=::BBDDahhwFWFWXXXXXr3   c                    t          g dg dg dg dg          }t          |                     |                                          |           t          g dg dg dg          }t          |                     |                                          |           t          |                     |d                                          |                    d                     d S r0  )r(   r   r   todenserl   rF  s     r1   test_from_matrixz_TestCommon.test_from_matrixj  s    IIIyyy)))YYY?@@4==++3355q999$$$#OOII     	4==++3355q999MM!7M++3355qxx7H7H	
 	
 	
 	
 	
r3   c                    g dg dg dg dg}t          |                     |                                          |           g dg dg dg}t          |                     |                                          t          |                     t          |                     |d                                          t          |                              d                     d S r0  )r   r   r   r   rl   rF  s     r1   test_from_listz_TestCommon.test_from_listw  s    WWWWWWWWWWW-4==++3355q999__YY 	4==++3355uQxx@@@MM!7M++3355uQxxw7O7O	
 	
 	
 	
 	
r3   c                    t          g dg dg dg dg          }t          |          }t          |                     |                                          |           |                     |          }t          |                     |                                          |           t          g dg dg dg          }t          |          }t          |                     |                                          |           t          |                     |d                                          |                    d                     |                     |          }t          |                     |                                          |           t          |                     |d                                          |                    d                     d S r0  )r   r   r   r   r   rl   r   r^  Ss      r1   test_from_sparsez_TestCommon.test_from_sparse  s   777777777777344qMM4==++3355q999MM!4==++3355q999###"??99   qMM4==++3355q9994=='=::BBDDahhwFWFWXXXMM!4==++3355q9994=='=::BBDDahhwFWFWXXXXXr3   c                    | j                                         }t          |t          j                  sJ t          || j                   t          |j        j	        |j        j
        k               | j                             d          }t          || j                   t          |j        j	                   t          |j        j
                    | j                             d          }t          || j                   t          |j        j	                    t          |j        j
                   t          j        | j         j        | j         j                  }| j                             |          }t          | j        |           t          | j        |           t          |j        |u            t          t          j        | j         j        | j         j                            }| j                             |          }t          | j        |           t          | j        |           t          ||u            t!          g dg          }|| j        z  }|| j                                         z  }t          ||           t!          g dg          j        }| j        |z  }| j                                         |z  }t          ||           |                     | j        t&                    }| j                            t&                    }	t          |                                |	           d S )Nr  r  r  r3  r  r  r  r  r  r  r        @)r   r6  r@   rA   r(   r   r   r   flagsc_contiguousf_contiguousr   r   r6   baser'   r   r  r   r   rl   )
r   chkr  rE   dense_dot_denser   rJ   check2spboolmatbools
             r1   test_todensez_TestCommon.test_todense  s   j  ""#ry)))))3)))	&#)*@@AAAj  s ++3)))	&'''CI**+++j  s ++3)))CI**+++	&'''htz'tz/?@@@j  S ))48S)))48S)))C   rx
 0
8HIIIJJj  S ))48S)))48S)))s
:::,dh,DJ&&(((?E222===/""$(Q,##%%)?F333txt44(//$''6>>++W55555r3   c                 j   t          | j                  }| j                                        }t	          ||           t          |j        j        |j        j        k               | j                            d          }t	          ||           t          |j        j                   t          |j        j                    | j                            d          }t	          ||           t          |j        j                    t          |j        j                   t          j
        | j        j        | j        j                  }| j                            |           t	          ||           d|d<   | j                            |           t	          ||           t          g d          }t          ||          }t          || j                                                  }t	          ||           t          g d	          }t          ||          }t          | j                                        |          }t	          ||           |                     | j        t                     }	|                    t                     }
t	          |	                                |
           d S )
Nr  r  r  r3  r  r  .r?  r@  )r   r   r   r   r   r   rB  rC  rD  rA   r   r   r6   r   r   r   r   rl   )r   r   rF  r  rE   rG  r   rJ   rH  rI  arrbools              r1   test_toarrayz_TestCommon.test_toarray  sJ   dhj  ""3$$$	&#)*@@AAAj  s ++3$$$	&'''CI**+++j  s ++3$$$CI**+++	&'''htz'tz/?@@@
s###3$$$C
s###3$$$***a++Atz))++,,?E222---  c1++TZ''))1--?F333txt44**T""6>>++W55555r3   c                   	 t          g dg dg dg          }|                     |          }t          D ]0}|                    |          }dD ]o}|                    ||          t	          j        |j                   t	                                          |           t	          j        |j                   pt                              |d          u                                |d          	t          	u           	fd}j        d	v rd
D ]} ||           j        dk    rdD ]} ||           j        dk    rdD ]} ||           2d S )N)y       @      @r   r   )r   y      @      @r   rD  )TFr  FTc                    t          |           }t          |           }t          ||           t          ||u           d|j        z  }||         }||          ||<   t          ||         ||         k               |||<   d S )N)r   )r~   r   r   r   )	attributerE   rJ   r  b_iS_castedS_copieds        r1   (check_equal_but_not_same_array_attributezI_TestCommon.test_astype.<locals>.check_equal_but_not_same_array_attribute  s    Hi00Hi00"1a(((
###16MdQ4x!!!%%%!r3   )csrcscbsr)indicesindptrdatacoo)rowcolr[  dia)offsetsr[  )	r   r   r$   rl   r   r6   r   formatr   )
r   r^  r<  r7   D_castedr   rU  rQ  rS  rT  s
           @@r1   test_astypez_TestCommon.test_astype  s   ######99   MM!!  	H  	HAxx{{H% 8 888AD811X^X^<<<X--//:::X_ah7777HOOAEO22h>???qt44HHH,---	 	 	 	 	 	 "777!> H HI<<YGGGGHE))!7 H HI<<YGGGGHE))!4 H HI<<YGGGGA 	H  	Hr3   c                 0   |                      t          dd                              dd                    }t          |j        t          j        d                     t          |                                j        t          j        d                     t          |                                j        |j                   t          |                    d                                          j        t          j        d                     t          |                    d	                                          j        t          j        d	                     |                                }|                                }t          ||u            d S )
Nry  rR   r3  r]   r   r   r3  r0  r2  )
r   r   r  r   r6   rA   asfptypera  rl   r   )r   rH   rI   r  s       r1   test_asfptypez_TestCommon.test_asfptype  s%   MM&11199!A>>??QWbhw//000QZZ\\'))<)<===QZZ\\(!(333QXXg&&//117)9L9LMMMQXXl++4466<bh|>T>TUUUJJLLJJLLQr3   c                 <      fd} j         D ]} ||           d S )Nc                     j         |          }j        |          }t          |dz  |dz                                             t          |dz  |dz                                             d S Nr]   L1@r   r   r   r   r
  s      r1   r   z*_TestCommon.test_mul_scalar.<locals>.check  sj    /%(C%e,Es1uuQw&7&7&9&9:::s4x%*)=)=)?)?@@@@@r3   r   r   s   `  r1   test_mul_scalarz_TestCommon.test_mul_scalar  N    	A 	A 	A 	A 	A % 	 	EE%LLLL	 	r3   c                 <      fd} j         D ]} ||           d S )Nc                     j         |          }j        |          }t          d|z  d|z                                             t          d|z  d|z                                             d S ri  rk  r
  s      r1   r   z+_TestCommon.test_rmul_scalar.<locals>.check*  sj    /%(C%e,Equqw&7&7&9&9:::tCx$u*)=)=)?)?@@@@@r3   rl  r   s   `  r1   test_rmul_scalarz_TestCommon.test_rmul_scalar)  rn  r3   c                     | j         t          j                 }t          t                    5  d |z   d d d            d S # 1 swxY w Y   d S r5   )r   rA   r   r   r  )r   r   s     r1   test_rmul_scalar_type_errorz'_TestCommon.test_rmul_scalar_type_error5  s    !"*-9%% 	 	5LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ?AAc                 <      fd} j         D ]} ||           d S )Nc                    j         |          }j        |          }|                                }d|d<   |}||z   }t          ||                                |z              ||                                z   }t          |                                |                                |                                z              ||d         z   }t          ||                                |d         z              d S )Nr  r  r   )r   r   r   r   r   r5  r6   r   r   rE   rJ   r8  r   s         r1   r   z#_TestCommon.test_add.<locals>.check;  s    /%(C%e,E

AAcFAAAq!))++/222AGGIIAqyy{{ yy{{QYY[[8: : : AaDAq!))++!"455555r3   rl  r   s   `  r1   test_addz_TestCommon.test_add:  sI    	6 	6 	6 	6 	6$ % 	 	EE%LLLL	 	r3   c                 <      fd} j         D ]} ||           d S )Nc                     j         |          }j        |          }|                                }d|d<   |}||z   }t          |||                                z              d S )Nr  r  )r   r   r   r   r   rv  s         r1   r   z$_TestCommon.test_radd.<locals>.checkQ  sb    /%(C%e,E

AAcFAAAq!aiikk/22222r3   rl  r   s   `  r1   	test_raddz_TestCommon.test_raddP  sI    	3 	3 	3 	3 	3 % 	 	EE%LLLL	 	r3   c                 n      fd} j         D ]&}|t          j        d          k    r ||           'd S )Nc                    j         |          }j        |          }t          ||z
                                  t	          j        d                     t          |dz
                                  |                               t	          j        g dg dg dgd                    }t          ||z
                                  ||                                z
             t          ||z
                                  |                                |z
             t          ||d         z
  ||d         z
             d S )Nr  r   r   r   r   rR  r   r   r   r   r   r{  r   rA  r   )r   r   r   r   rA   r   r   r   r6   r   r   rH   r   s       r1   r   z#_TestCommon.test_sub.<locals>.check_  s   /%(C%e,E6688"(6:J:JKKK	2244c:::,,,}}}EsKK A 	2244cAIIKK6GHHHE	2244aiikkC6GHHH us1v~sSV|<<<<<r3   r   r   rA   r6   r   s   `  r1   test_subz_TestCommon.test_sub^  sa    	= 	= 	= 	= 	=  % 	 	E((((E%LLLL	 	r3   c                 n      fd} j         D ]&}|t          j        d          k    r ||           'd S )Nc                    j         |          }j        |          }t          ||z
  g dg dg dg           t          ||z
  g dg dg dg           t          d|z
                                  |                                t          g dg dg dgd                    }t          ||z
  ||                                z
             t          ||z
  |                                |z
             t          |                                |z
  |                                |z
             t          ||                                z
  ||                                z
             t          |d         |z
  |d         |z
             d S )Nr  r   r}  r~  r  r   )r   r   r   r   r   r(   r  s       r1   r   z$_TestCommon.test_rsub.<locals>.checkw  sx   /%(C%e,Eeiii			)))-LMMMiii			)))-LMMME	2244sd;;;fiii


:::%FsKKLLAa#		*;<<<C!))++*;<<<qyy{{U2AIIKK#4EFFFuqyy{{2C!))++4EFFF s1v~s1v|<<<<<r3   r   r  r   s   `  r1   	test_rsubz_TestCommon.test_rsubv  sa    	= 	= 	= 	= 	=" % 	 	E((((E%LLLL	 	r3   c                 <      fd} j         D ]} ||           d S )Nc                 r   j         |          j        |          t          dz                                              t	          fdt          dd          D                       }t	          fdt          dd          D                       }t          |                                |           d S )Nr   c                     g | ]}|z  S rN   rN   )r  rj  r   s     r1   r  z8_TestCommon.test_add0.<locals>.check.<locals>.<listcomp>  s    777aE	777r3   r   r   c                     g | ]}|z  S rN   rN   )r  rj  r   s     r1   r  z8_TestCommon.test_add0.<locals>.check.<locals>.<listcomp>  s    555AC555r3   )r   r   r   r   r  r   r   )r6   sumSsumDr   r   r   s      @@r1   r   z$_TestCommon.test_add0.<locals>.check  s    /%(C%e,E 	2244c:::77775A;;77788D5555q!55566D55555r3   rl  r   s   `  r1   	test_add0z_TestCommon.test_add0  sI    		6 		6 		6 		6 		6 % 	 	EE%LLLL	 	r3   c                    t          g dg dg          }t          g dg dg          }|                     |          }|                     |          }t          |                    |                                          ||z             t          |                    |                                          ||z             t          g dg dg          }t          g dg dg          }|                     |          }|                     |          }t          |                    |                                          ||z             t          |                    |                                          ||z             t          |                    |                                          ||z             t          |                    |                                          ||z             d S )	N)rR  r   r|  )r]   rP  r/  )r   rz  r   )r   rC  r   y      ?       y              @y              y      @      y            @r/  y      @       @y      @      y             ?y              y             @r|  )r   r   r   multiplyr   )	r   rH   rI   r  Bspr  r^  CspDsps	            r1   test_elementwise_multiplyz%_TestCommon.test_elementwise_multiply  s   777888$%%777888$%%mmAmmACLL--55771===CLLOO3355qs;;; $$$^^^455$$$^^^455mmAmmACLL--55771===CLLOO3355qs;;; 	CLL--55771===CLLOO3355qs;;;;;r3   c                    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          j        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  }n+# t          $ r t          t          |j        |           Y Tw xY w|                    |          }t          |                                |           |D ]}|D ]}	 |                                |z  }n6# t          $ r Y 't          $ r t          t          |j        |           Y Mw xY w|                    |          }t          |          r#t          |                                |           t          ||           d S )NrR  r   r   r   )rz  r|  r  r   r]   r   )r{  ry  r   )rC  r   r]   )ry  ry  ry  rw  r  r   r   N)r   rA   onesr  r   r   r   r   r  r   r  r"   )r   rH   rI   r  r^  Er  GHJKLr  r  EspFspHspHsppJspJsppKspr  
spmatricesr  r  
dense_multsp_mults                              r1   #test_elementwise_multiply_broadcastz/_TestCommon.test_elementwise_multiply_broadcast  s1   1#JJB4&MM(((OO888*A3sA3-  777888GGG,--IIGFOOCA3%LLQqE1Q%=/"" mmAmmAmmAmmAmmA}}QvY''mmA}}Qqqq4x[))mmAq!Q1aAq!43S#tS$D
  	C 	CA C C!"qyy{{!:JJ!   !*aj!<<<H **Q--#GOO$5$5zBBBBC  	= 	=A = =!"qJJ    H!   !*aj!<<<H **Q--g&& ='(9(9:FFFF'<<<<=	= 	=s*   ')G%G98G9>I
J	"$J	J	c           	         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        z            |           |                     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        |z            |           t          g d
g dg          }t          g dg dg          }|                     |          }|                     |          }t          t          ||z            ||z             t          g dg dg          }t          g dg dg          }|                     |          }|                     |          }t          j
        d          5  t          t          ||z            ||z             d d d            n# 1 swxY w Y   t          d	dgdd	gg          }t          dd	gdd	gg          }|                     |          }|                     |          }t          j
        dd          5  t          t          j        t          ||z                      ||z             d d d            d S # 1 swxY w Y   d S )Nr   r}  r~  r  r         ?rP  g      ?r   r  r  r  r  rw  )rP  r]   r   r  )r   r   r   r   )divide)r  r  )rA   r   r   r   r   r   r(   r   r   r   r  )r   r   denomrH   rI   r  r  s          r1   test_elementwise_dividez#_TestCommon.test_elementwise_divide  sO   rvbfQ'rva'VAbfRV,. 	74:
#:;;XFFFfiii


:::%FsKKLLrvbfS)s26*VD*, 	74:#566AAA $$$^^^455$$$^^^455mmAmmAGC#I..!444 777888$%%777888$%%mmAmmA[))) 	: 	:wsSy111q5999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: Aa5!A-  Aa5!A-  mmAmmA[(;;; 	D 	Drxc	(:(:;;QUCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds$   $H55H9<H9*6K--K14K1c                    t          g dg dg dg dg          }|                     |          }dD ]c}||z  }t          j                            ||          }t          |                                |           t          |j        |j                   ddD ]}t          t          |j        |           |                     |d dd d f                   }t          t          |j        d           d S )	Nr   r   r]   r   )r   r   rR  r   )r   r/  r   r   )r   ry  rz  r{  r   r   r]   r   )r   g@r[  r   r   )r   r   rA   r!  matrix_powerr   r   r   r6   r   	Exception__pow__)r   rH   rI   exponentret_spret_nps         r1   test_powz_TestCommon.test_pow  s    <<<|||\\\JKKMM!! 	5 	5H[FY++Ax88Fv~~//888v|4444 * 	: 	:H)QY9999 MM!BQBqqqD'""iA.....r3   c           	      D   |                      t          g dg dg dg dg                    }t          g d|z  t          g d|                                                     t          g dg          }t          ||z  ||                                z             d S )Nr   r   r   r   r   r   r]   r   r  r]   r   r   rh  )r   r(   r   r   r   r   )r   r"  r]  s      r1   test_rmatvecz_TestCommon.test_rmatvec  s    MM&'''''')))GGG!DEEFF!)))A+s999aiikk/J/JKKKYYYK  !#'3+<=====r3   c                 <   |                      dgdgdgg          }t          t          |t          d          z                       t	          |t          d          z                                  dgdgdgg           t	          |t          dg          z  t          g d                     t	          |t          dgg          z  t          dgdgdgg                     t	          |t          j        d          z  t          j        d                     d S )Nr   r]   r   rw  r   r   r   r   )r   r   r"   r   r   r   rA   r  rF  s     r1   test_small_multiplicationz%_TestCommon.test_small_multiplication%  s    MMA3sA3-((
1uQxx<(()))a%((l++--aS1#???Qs^U999%5%5666Qu%uqcA3_'='=>>>Q("'&//:::::r3   c                    |                      dgdgdgg          }t                      }t          ||z   d           t          ||z
  d           t          ||z  d           t          ||z   d           t          ||z
  d           t          ||z  d           t          t          d          d           t          t          d          d           d S )Nr   r]   r   r   r   A @ BB @ A)r   r   r   evalr   rH   rI   s      r1   test_binop_custom_typez"_TestCommon.test_binop_custom_type/  s    
 MMA3aS/**MMQU0111QU0111QU0111QU1222QU1222QU1222T']]$8999T']]$9:::::r3   c                    |                      dgdgdgg          }t          d          }t          ||z   d           t          ||z
  d           t          ||z  d           t          ||z   d           t          ||z
  d           t          ||z  d           t          t          d          d           t          t          d          d           d S )	Nr   r]   r   r  r   r   r  r  )r   r   r   r  r  s      r1   !test_binop_custom_type_with_shapez-_TestCommon.test_binop_custom_type_with_shape@  s    MMA3aS/**"5))QU0111QU0111QU0111QU1222QU1222QU1222T']]$8999T']]$9:::::r3   c           	         |                      t          g dg dg dg dg                    }d}|                    |          }||z  }t          |                                |                                           d S )Nr  r  r  r  rM   )r   r   r   r   r   )r   r"  scalaractualr   s        r1   test_dot_scalarz_TestCommon.test_dot_scalarM  s}    MM%777 CDDEEvv:(((*:*:*<*<=====r3   c           	         |                      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          t	          j        ||          |                                |z             t          t	          j        ||                                          ||z                                             t          t	          j        |                                |          ||z                                             t          t	          j        ||                                          ||z                                             t          t          t          j        |d           t          t          t          j        d|           d S )
Nr  r  r  r  r   r   r]   r   rw  )	r   r   r  r   operatormatmulr   r   r   )r   r"  rI   r^  s       r1   test_matmulz_TestCommon.test_matmulU  s   MM%777 CDDEEMM%!A!uaU 3C8899WWWI  	"(/!S"9"9"#))++"3	5 	5 	5 	"(/!Q"7"7"?"?"A"A#$q5//"3"3	5 	5 	5!(/!))++q"A"A#$q5//"3"3	5 	5 	5!(/!QYY[["A"A#$q5//"3"3	5 	5 	5 	j(/1a888j(/1a88888r3   c           
         |                      t          g dg dg dg dg                    }t          g dg          j        }t	          ||z  |                                |z             t          |t          g d          z  j        d           t          |t          dgdgd	gg          z  j        d
           t          |t          dgdgd	gg          z  j        d
           t          t          |t          g d          z  t                               t          t          |t          g d          j        z  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        |           t	          |t          g d          z  t          |j        g d                     t	          |dgdgd	ggz  t#          t          |j        g d                    j                   d S )Nr  r  r  r  rw  )rR  r   r]   r   )rR  r   rh  )r   r(   r   r  r   r   r   r   r   r@   r
   rA   r   r   r   r   rH   r'   )r   r"  r^  bad_vecsr7   s        r1   test_matvecz_TestCommon.test_matvecj  s)   MM&'''''')))GGG!DEEFFWWWI !!c'199;;+<=== 	a%..(/555a%!aS!...5e<<<a&1#qc1#///6u=== 	
1uWWW~~-w77888
1vggg00")<<=== 1Q%LL%			"2"2EA3s)4D4D777OOVaS!I%6%68 	4 	4A*ai3333 	"!E'''NN"2CGGG4D4DEEE!!aS!aSM/8CGGG<L<L3M3M3OPPPPPr3   c                    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          ||z                                  ||z             t          ||z  ||z             t          ||z  ||z             t          ||z  ||z             |                                }|}||z  }t          ||z                                  |           t          ||z  |           t          ||z  |           t          ||z  |           |                                }t          ||z                                  |           t          ||z  |           t          ||z  |           t          ||z  |           |                                }t          ||z                                  |           t          ||z  |           t          ||z  |           t          ||z  |           d	}	d
}
t          j	        d           t          |	df          }t          |	          D ]7}t          d          D ]%}t          j                    }||
k     r
||
z  |||f<   &8|                     |          }||j        z  }t          |                                |                                |j                                        z             t          |                                |                                |                                j        z             |                     ddgddgg          }|                     ddgddgddgg          }t          t          |j        |           d S )Nr  r  r  r  r   r   r]   r   r  g333333?r   rR  r/  ry  )r(   r   r   r   r   r4  r5  r6  r   r[   r   r   r  r   r   r   )r   rE   a2rJ   aspbspcspr8  wantr  fracrH   r  r  r  rI   s                   r1   test_matmat_sparsez_TestCommon.test_matmat_sparse  s   GGGGGGIIIggg677GGGGGGIIIggg677QqE1Q%1&s++mmAmmA!3s7"3"3"5"5qs;;;!#a%1---!!C%1---!"S&!A#... iikks!3s7"3"3"5"5t<<<!#a%...!!C%...!"S&$///iikk!3s7"3"3"5"5t<<<!#a%...!!C%...!"S&$///iikk!3s7"3"3"5"5t<<<!#a%...!!C%...!"S&$/// A1Q%LLq 	$ 	$A1XX $ $MOOt88tVAacF$
 MM!acE!!))++qyy{{QS[[]]/JKKK!!))++qyy{{QYY[[]/JKKK MMAa5!A-((MMAa5!A!u-..j!)Q/////r3   c           	         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 ]d}||z  }t          t	          |t          |                               t          |j        d           t          |t          ||                     ed S )Nr  r  r  r  r   r]   r   rR  r/  ry  rR  r]   )	r(   r   r   r   r@   typer   r   r   )r   rE   r  bsrJ   results         r1   test_matmat_densez_TestCommon.test_matmat_dense  s    GGGGGGIIIggg677mmA aUAa5!A'((&1Q%1qe1D*E*EF 	+ 	+AUFJvtAww//000u---Qq****		+ 	+r3   c                    t          j        g dg dg dgddgddgg          }|                                }|                     |          }dD ]}|                    |          }t          |j        |           t          |                                |           |                     |d	z                                 |          }t          |j        |           t          |                                |d	z               t          |d
z             |          }t          |j        |           t          |                                |           dD ]e}|                    |          }t          ||           |                     |d	z                                 |          }t          ||d	z              fd S )Nre  r   r   rR  )r/  r   r   r   r]   r   r   )rX  r\  rW  rV  r_  r;   lil              @_matrix)r   dense)	rs   r   r   r   asformatr   ra  r   r  )r   rH   r^  ra  rE   rJ   r8  s          r1   test_sparse_format_conversionsz*_TestCommon.test_sparse_format_conversions  s   K1QqE1Q%=AAIIKKMM!A 	/ 	/F

6""A&)))qyy{{A...ad##,,V44A&)))qyy{{AbD111(Vi'((++A&)))qyy{{A....( 	( 	(F

6""Aq!$$$ad##,,V44Aq!B$''''	( 	(r3   c           	      J   t          g dg dg dg          }t          g dg dg          }t          ||          }|                     |          }dD ]M}t          |d|z             }dD ]5}d	D ]0}t	           |||f
                                          |           16Nd S )Nr  r  r   r   rR  r/  r  r   r   r/  )rX  to)r   r]   r   ry  )r   r]   r   rR  ry  r  	blocksize)r   r   r   r~   r   r   )	r   r7   r8   rH   r  ra  fnXYs	            r1   
test_tobsrz_TestCommon.test_tobsr  s    999YYYyyy122777777#$$1IImmA 	D 	DFdVm,,B! D D, D DA q!f!5!5!5!=!=!?!?CCCCDD	D 	Dr3   c                 0     j         }t          j        g g          }||g fd}                     d          }t	          t          j        |                                          t          j        t          d                               t	          |j                                        t          d                     t          t          |j        d            j        D ]-}t          t                              D ]} |||           .d S )Nc                    t          |         |           }                    |          }|                                }|                                }t          |                                |           t          |                                                                |           t          |j        |j                   d S r  )r   r   r   r   r   r   r6   )r6   r  r   r   rE   rJ   r  r   s         r1   r   z)_TestCommon.test_transpose.<locals>.check  s    5111CMM#&&E!!AAqyy{{A...q{{}}4466<<<!'*****r3   r  rR  r   r   )axes)r   rA   r   r   r   r   r   r   r  r   r   r   r   r   )r   r  r  r   rp  r6   r  r  s   `      @r1   test_transposez_TestCommon.test_transpose  s   "5>		+ 		+ 		+ 		+ 		+ 		+ f%%2<..6688<f66	8 	8 	857??,,eFmm<<<j%/::::( 	  	 E3x==))    eQ 	  	 r3   c                 <      fd} j         D ]} ||           d S )Nc                     j         |          }j        |          }||z   }t          |||z              ||z   }t          |||z              d S r5   )r   r   r   r6   r   r   sum1sum2r   s        r1   r   z)_TestCommon.test_add_dense.<locals>.check  s^    /%(C%e,E ;DtS3Y///3;DtS3Y/////r3   rl  r   s   `  r1   test_add_densez_TestCommon.test_add_dense
  sI    	0 	0 	0 	0 	0 % 	 	EE%LLLL	 	r3   c                 n      fd} j         D ]&}|t          j        d          k    r ||           'd S )Nc                 8   j         |          }j        |          }|j        t          k    r2||z
  }t	          |||z
             ||z
  }t	          |||z
             d S ||z   |z   |z
  }t	          |||z              ||z   |z   |z
  }t	          |||z              d S r5   )r   r   r6   r   r   r   s        r1   r   z)_TestCommon.test_sub_dense.<locals>.check  s    /%(C%e,E yD  U{"4s333s{"4s33333 c	C50"4s333-4"4s33333r3   r   r  r   s   `  r1   test_sub_densez_TestCommon.test_sub_dense  sa    	4 	4 	4 	4 	4$ % 	 	E((((E%LLLL	 	r3   c           	          t          j        g dg dg dg          t          j        g dg dg dg          t          j        g dg dg dg           fd	} j        D ]^}t           j        t           j        t           j        fD ]8}d
D ]3} |t          j        |          t          j        |          |           49_d S )N)r   r   r   )r   rR  r/  rD  )r   r   r]   )r   r   ry  r  )r   y      @       @r/  )r                 ?y             c                 x   t          j        | t           j                  r)                                        |                     }n(                    
                    |                     }|dk    r|                    d          }nu|dk    r|                    d          }nY|dk    r                    |          }n=|dk    r)                                        |                    }nt                      t                      5 }|                    t          d           |
                    |          }|                    |          }d d d            n# 1 swxY w Y   t          j
        t          |          t          |                    }t          t          |          |           t          |j        |j                   t          j        t          |          t          |                    }	t          t          |          |	           t          |j        |	j                   d S )Nr  r   scalar2r   r  rs   zHTaking maximum .minimum. with > 0 .< 0. number results to a dense matrix)rA   rd   complexfloatingr   rl   r  r   r   r   r#   maximumminimumr   r   r   r6   )r6   dtype2btyperH   rI   r   max_smin_smax_dmin_dA_denseA_dense_cpxB_denser   s             r1   r   z/_TestCommon.test_maximum_minimum.<locals>.check9  s   }UB$677 9MM+"4"4U";";<<MM'.."7"788  KKNN)##KKOO'!!NN6**(""MM'.."8"899 ll""$$ %

2eg g g 		!		!% % % % % % % % % % % % % % % Jwqzz71::66Ewu~~u555ek222Jwqzz71::66Ewu~~u555ek22222s   AE##E'*E')r  r
  r  rs   )rA   r   r   r   float_complex_r6   )r   r   r6   r  r  r  r  r  s   `    @@@r1   test_maximum_minimumz _TestCommon.test_maximum_minimum3  s   (IIIyyy)))<==(IIIyyy***=>>h			<<<FGG	3 	3 	3 	3 	3 	3 	3 	3> % 	D 	DE7BIr{; D DE D DEE"(5//28F+;+;UCCCCDD	D 	Dr3   c                    | j         }t          |                                j        |j                   t          |                    |d          j        |j                   t          |                    |d          j        |j                   t          |                                                                |                                           t          |                    |d                                          |                                           t          |                    |d                                          |                                           t          |d|j        z             }t           |            |u            t           |d          |u            t           |d          j        |j                   t           |d                                          |                                           t          t          |                                |                      d S )NTr  Fr  )	r   r   r   ra  	__class__r   r~   r   rK   )r   rH   toselfs      r1   	test_copyz_TestCommon.test_copy]  s   J 	QVVXX_ah///Q[[[--4ah???Q[[[..5qx@@@QVVXX%%''555Q[[[..6688!))++FFFQ[[[//7799199;;GGG 4!(?++AE"""a'(((VV&&&-qx888VV&&&..00!))++>>> 	+AFFHHa88899999r3   c                 
   t          t          j        d                              dd                    }|                     |          }t          ||          D ]'\  }}t          |                                |           (d S )N2   r/  rM   )r(   rA   r   r  r   zipr   r   )r   rI   rH   r7   r8   s        r1   test_iteratorz_TestCommon.test_iteratoru  sx    29R==((B//00MM!1II 	) 	)DAqa((((	) 	)r3   c                    t          g           }|                    d          }|                    d          }|                    d          }|                    d          }|                    d          }t          j        ddg          }|                     |          }|                     |          }	|                     |          }
|                     |          }|                     |          }|                     |          }t          |                    |          j        t          j        ||                     t          |	                    |          j        t          j        ||                     t          |                    |	          j        t          j        ||                     t          |
                    |          j        t          j        ||                     t          |
                    |          j        t          j        ||                     t          |                    |
          j        t          j        ||                     t          |                    |
          j        t          j        ||                     t          |                    |          j        t          j        ||                     t          t          |j        |           t          t          |j        |           t          |
                    |          j        t          j
        ||                     t          |	
                    |	          j        t          j
        ||                     t          |
                    |          j        t          j
        ||                     t          |
                    |          j        t          j
        ||                     t          |	
                    |          j        t          j
        ||                     t          |
                    |          j        t          j
        ||                     t          |
                    d          j        t          j
        |d                     t          |	
                    d          j        t          j
        |d                     t          |
                    d          j        t          j
        |d                     t          t          |j
        |           t          t          |j
        |           t          |                    |          j        |                    |                     t          |	                    |	          j        |                    |                     t          |                    |          j        |                    |                     t          t          |j        |           t          t          |	j        |           d S )Nrl  r  rn  r  r  r/  ry  )r   r  rA   r  r   r   r   rH   r   r   r  r   )r   r   rE   rJ   r8  r   r9  r:  r  r  r  dspespfsps                 r1    test_size_zero_matrix_arithmeticz,_TestCommon.test_size_zero_matrix_arithmetic|  s    BiiKKKKKKKKKKGQFOOmmAmmAmmAmmAmmAmmA 	3773<<>26!Q<<8883773<<>26!Q<<8883773<<>26!Q<<8883773<<>26!Q<<8883773<<>26!Q<<8883773<<>26!Q<<8883773<<>26!Q<<8883773<<>26!Q<<888 	j#'1---j#'1--- 	3<<,,.Aq0A0ABBB3<<,,.Aq0A0ABBB3<<,,.Aq0A0ABBB3<<??,bk!Q.?.?@@@3<<??,bk!Q.?.?@@@3<<??,bk!Q.?.?@@@3<<??,bk!Q.?.?@@@3<<??,bk!Q.?.?@@@3<<??,bk!Q.?.?@@@ 	j#,222j#,222 	3;;s++-qyy||<<<3;;s++-qyy||<<<3;;s++-qyy||<<< 	j#+s333j#+s33333r3   c                    t          g           }|                    d          }|                    d          }|                    d          }|||fD ]}|                     |          }t          |                                j        |           t          |                                j        |           t          |                                j        |           t          |                                j        |           t          |	                                j        |           t          |
                                j        |           d S )Nrl  rn  r  )r   r  r   r   r6  rH   r5  r4  toliltodoktobsr)r   r   rE   rJ   r8  r;  spms          r1   test_size_zero_conversionsz&_TestCommon.test_size_zero_conversions  s   BiiKKKKKKQ 	1 	1A--""Csyy{{}a000syy{{}a000syy{{}a000syy{{}a000syy{{}a000syy{{}a0000	1 	1r3   c                      dd l t                      }|                    t                     | fd            } |             d S )Nr   c                  v   j                                         } t          j                  D ]}                                        | |                    }t          | j        |j                   t          | 	                                |	                                           t          | j
        |j
                   | j                                        D ]Y\  }}t          |t          j                  rt          ||j        |                    ;t!          ||j        |         k               Z
d S )N)protocol)r   r   r   HIGHEST_PROTOCOLloadsdumpsr   r   r   r   ra  r>   itemsr@   rA   r
   r   )r   r/  sploadedkeyr	  pickler   s        r1   r   z&_TestCommon.test_pickle.<locals>.check  s   JOO%%E!&"9:: 	? 	?!<<UX(N(NOOU[(.999"5==??H4D4D4F4FGGGU\8?;;; % 4 4 6 6 ? ?HC!#rz22 ?*30A#0FGGGGx'8'= =>>>>	?	? 	?r3   )r6  r   r   r#   )r   r   r   r6  s   `  @r1   test_picklez_TestCommon.test_pickle  sd    !!

*+++		? 	? 	? 	? 	? 
	? 	r3   c                 2      fd}dD ]} ||           d S )Nc                    | dk    rt          j        d           j        t          t          fv rt          j        d           t          t          |           }                    t          j        d                              dd          dz            } ||	                                          } ||          }t          |	                                |           d S )Nsignz2sign conflicts with comparison op support on Numpyz%Unary ops not implemented for dok/lilr  rR  r/        4@)r   r   r   r   r   r~   rA   r   r  r   r   )r   ufuncr  X0X2r   s        r1   r   z5_TestCommon.test_unary_ufunc_overrides.<locals>.check  s    v~~ / 0 0 0}Z 888CDDDB%%Ebimm33Aq99C?@@Aqyy{{##BqBrzz||R00000r3   )sintanarcsinarctansinhtanharcsinharctanhrintr:  expm1log1pdeg2radrad2degfloorceiltruncsqrtrE  rN   )r   r   r   s   `  r1   test_unary_ufunc_overridesz&_TestCommon.test_unary_ufunc_overrides  sH    	1 	1 	1 	1 	1 	 	D E$KKKK		 	r3   c                 (   t          j        g dg dg dg          }|                     |          }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           |                    d
           t          |j        g dg dg dg           |                    dd           t          |j        ddgddgddgg           dD ]}t          t          |j        |           d S )Nr   r   r   rR  r]   r   r   r   r   r   r   r   r   r]   r   r   r]   r   r]   r]   r  r1  )r]   r   r   rD  )r   )r   r]   r  rw  	rA   r   r   r   resizer   rH   r   r   )r   r^  r<  	bad_shapes       r1   test_resizez_TestCommon.test_resize  s   Hlll"ll"ll$ % % MM!  D()))13!Q"#Q"#Q!) 	* 	* 	* 	
13!Q"#Q!) 	* 	* 	*	13!Q"#Q"#Q!) 	* 	* 	* 	
13!*!*!, 	- 	- 	- 	
13!*!*!, 	- 	- 	-
 	
A13!Q"#Q"#Q!) 	* 	* 	* : 	; 	;I*ah	::::	; 	;r3   c                    | j         }|j        }|                    |d          }t          |                                |                                           |t
          vrt          t          ||                     |                    ||j        d          }t          |                                |                                           |t
          vrt          t          ||                     |                    |t          j
        d          }t          |                                |                                           |                    |d          }t          |                                |                                           t          t          ||                      dD ]}||k    r	|                    |          }|                    |d          }t          |                                |                                           |                    |d          }t          |                                |                                           t          t          ||                      d S )NFr  )r6   r   T)rV  rW  r\  r_  r;   r  )r   ra  r  r:   r   NON_ARRAY_BACKED_FORMATSr   rK   r6   rA   r0  r   r  )r   rH   self_formatr  other_formatrI   s         r1   test_constructor1_basez"_TestCommon.test_constructor1_base  s   JhKKK&& aiikk:::666+Aq11222KKuK55 aiikk:::666+Aq11222KK%K88199;;		444KKK%% aiikk:::+Aq111222F 		7 		7L{**

<((AAE**A$QYY[[!))++>>>AD))A$QYY[[!))++>>>/15556666		7 		7r3   N)`r   r   r   __doc__r$   r   classmethodr   r   r   r   r   r  r  r  r  r  r!  r&  r)  r,  r<  rG  rN  rU  rX  r_  rc  ru  r  r  r   markslowr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r*  r.  r   r4  r7  r9  r=  rK  rN  rc  rf  rm  rq  rs  rw  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r&  r,  r7  rP  rZ  r_  rN   r3   r1   r   r      s       @@"K= = [=,  	1 	1 	1# # #J% % %N= = =~< < <|8 8 8t8 8 8t? ? ?= = =
: : :
    / / /$> > >I I IF F FE E E/ / /
/ / /
F F FB? ? ?*= *= *=X [50 50 50n9 9 9># # ## # #O O OO O O!  !  ! F
> 
> 
>   6 6 6(7 7 7     D
? 
? 
?   6 6 6(7 7 7A A A,  " Y Y [Y 

 

 [

 

 

 [

 Y Y [Y*'6 '6 '6R#6 #6 #6J &H &H [&HP  	 	 		 	 	  
  ,    0  2  < < <*5= 5= 5=n!D !D !DF/ / /$> > >; ; ;; ; ;"; ; ;> > >9 9 9*Q Q Q:40 40 40l+ + +( ( (2
D 
D 
D     6    6(D (D (DT: : :0) ) )84 84 84t1 1 1  (  *"; "; ";H7 7 7 7 7r3   r   c                   &    e Zd Zd Zd Zd Zd ZdS )_TestInplaceArithmeticc                    t          j        d          }|                     |          }|                                }|                                }||z  }||z  }t	          ||           |                                }|                                }||z  }||z  }t	          ||           t          t          t          j        ||           |                                }|                                }|	                    |j
                  }||j
        z  }t	          ||           t          t          t          j        ||           d S )Nr  )rA   r  r   r   r   r   r   r  imulr   r  r  	ifloordiv)r   rE   rJ   r7   r8   s        r1   test_inplace_densez)_TestInplaceArithmetic.test_inplace_dense5  s   GFOOMM!FFHHFFHH	Q	Q1a   FFHHFFHH	Q	Q1a    	j(-A666FFHHFFHHEE!#JJ	QS1a    	i!3Q:::::r3   c                 <      fd} j         D ]} ||           d S )Nc                     j         |          }j        |          }t          j        t	          d          | d          rT|                                }|dz  }|                                }|dz  }t          ||                                           t          j        t	          d          | d          rV|                                }|dz  }|                                }|dz  }t          ||                                           d S d S Nr]   	same_kind)castingrj  r   r   rA   can_castr  r   r   r   r6   r   r   rE   rJ   r   s        r1   r   z6_TestInplaceArithmetic.test_imul_scalar.<locals>.checkQ  s    /%(C%e,E {477E;??? 3JJLLQHHJJQ"1aiikk222{4::ukBBB 3JJLLT	HHJJT	"1aiikk222223 3r3   rl  r   s   `  r1   test_imul_scalarz'_TestInplaceArithmetic.test_imul_scalarP  sI    	3 	3 	3 	3 	3& % 	 	EE%LLLL	 	r3   c                 z      fd} j         D ],}t          j        |t          j                  s ||           -d S )Nc                     j         |          }j        |          }t          j        t	          d          | d          rT|                                }|dz  }|                                }|dz  }t          ||                                           t          j        t	          d          | d          rV|                                }|dz  }|                                }|dz  }t          ||                                           d S d S rl  ro  rq  s        r1   r   z6_TestInplaceArithmetic.test_idiv_scalar.<locals>.checkh  s    /%(C%e,E{477E;??? 3JJLLQHHJJQ"1aiikk222{4::ukBBB 3JJLLT	HHJJT	"1aiikk222223 3r3   )r   rA   rp  int_r   s   `  r1   test_idiv_scalarz'_TestInplaceArithmetic.test_idiv_scalarg  s`    	3 	3 	3 	3 	3$ % 	 	E ;ubg.. e		 	r3   c                 
   |                      t          j        d                    }|                      t          j        d                    }|                      t          j        d                    }||z  }||z   }t          |j        |j                   ||z  }||z  }t          |j        |j                   ||z  }||z
  }t          |j        |j                   t          t          t          j        ||           d S )Nr/  )	r   rA   r!   r   rH   r   r  r  rh  )r   rE   rJ   bps       r1   test_inplace_successz+_TestInplaceArithmetic.test_inplace_success  s     MM"&))$$MM"&))$$]]26!99%%	Q!VRT"""	Q!VRT"""	Q!VRT"""i!3Q:::::r3   N)r   r   r   ri  rr  rv  ry  rN   r3   r1   re  re  4  sP        ; ; ;6  .  2; ; ; ; ;r3   re  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )_TestGetSetc                 `      fd}t           D ]} |t          j        |                      d S )Nc                    t          g dg dg dg dg|           }                    |          }|j        \  }}t          | |          D ]6}t          | |          D ]"}t	          |||f         |||f                    #7t	          t          |d                   |            dD ]$}t          t          t          f|j	        |           %d S )Nr1  rR  r   r   r   r]   r   rD  r3  r   r   r   r   r#  )rR  r   r  )rR  r   rw  )
r   r   r   r   r   r  r   
IndexErrorr  __getitem__)	r6   r^  rH   r"  r%  r  r  r  r   s	           r1   r   z*_TestGetSet.test_getelement.<locals>.check  s	   wwwwwwwww  (-. . .A a  A'CAaA2q\\ 1 1r1 1 1A 1Q31Q300001 afu---B J Jz95q}bIIIIJ Jr3   r$   rA   r6   r   s   `  r1   test_getelementz_TestGetSet.test_getelement  sW    	J 	J 	J 	J 	J$ & 	# 	#EE"(5//""""	# 	#r3   c                 `      fd}t           D ]} |t          j        |                      d S )Nc                                         d|           }t                      5 }|                    t          d           |                     d          |d<   |                     d          |d<   |                     d          |d	<   |                     d
          |d<   |                     d          |d<   |                     d          |d<   |                     d          |d	<   d d d            n# 1 swxY w Y   | t
          j        k    r+t          |                                g dg dg dg           dD ]}t          t          |j        |d           g dt          g d          fD ]}t          t          |j        d|           t          j        | t
          j                  s1| t
          j        k    r#dD ]"}t          t           |j        d|           d S d S d S )Nr  r3  r  r   rl  rA  r   r]   r   r  r  r  r{  r   r   rz  r   r   r/  )r   r/  r   r{  )r   r   rR  r   )r]   r   rz  r   ))r   rR  )r   rR  r  r  r$  g     ^@rw  )r  )r   r   r   r#   r  rA   bool_r   r   r   r  __setitem__r   r   rd   r  r  )r6   rH   r   r  r  r   s        r1   r   z*_TestGetSet.test_setelement.<locals>.check  s6   e511A"$$ 	(

2\^ ^ ^**Q--$**S//$**Q--$**S//$**Q--$ ::a==%**Q--$	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(   "IIKK$$$   8 D Dj!-UCCCCgguWWW~~. C Cj!-BBBBM%);<< FRX%% F FA!)Q]E1EEEEF F%%F Fs   CC77C;>C;r  r   s   `  r1   test_setelementz_TestGetSet.test_setelement  sX     	F  	F  	F  	F  	FD & 	# 	#EE"(5//""""	# 	#r3   c                 `      fd} j         D ]} |t          j        |                      d S )Nc                                          d|           }t                      5 }|                    t          d           d|d<   d d d            n# 1 swxY w Y   t	          |d         d           d S )N)r   rM   r3  r  r   )r   rC  )r   r   r   r#   r   r6   rH   r   r   s      r1   r   z9_TestGetSet.test_negative_index_assignment.<locals>.check  s    gU33A"$$ 

2\^ ^ ^%               51%%%%%s   !AAAr  r   s   `  r1   test_negative_index_assignmentz*_TestGetSet.test_negative_index_assignment  sU    	& 	& 	& 	& 	& % 	# 	#EE"(5//""""	# 	#r3   c           	           d\   fd}dddt          d          dfdt          d          ft          d          t          d          ffD ]\  }} |||d           d S )	Nr/  rM   c                 V   | d|d|}                     f          }t                      5 }|                    t          d           d|| |f<   d d d            n# 1 swxY w Y   t	          |                                ||           t	          || |f         d|           d S )Nz ; r  r   r  )r   r   r   r#   r   r  )	r  r  nitemsr.   rH   r   r;  r  r   s	         r1   	_test_setz3_TestGetSet.test_scalar_assign_2.<locals>._test_set  s    $%AAqqq&&1Cq!f%%A"$$ 

2\^ ^ ^!Q$                ====!Q$C888888s   #A  A$'A$r]   r   r   r{  r  r   r   r   )r   r   r  r  r  r;  r  s   `   @@r1   test_scalar_assign_2z _TestGetSet.test_scalar_assign_2  s    1	9 	9 	9 	9 	9 	9 	9 WhrB"eBiiBiir+- 	 	DAqIaA	 	r3   c                 L   |                      d          }t          j        d          }t                      5 }|                    t
          d           ||fD ]}d|d<   d|d<   d|d<   	 d d d            n# 1 swxY w Y   t          |                                |           d S )Nr.  r  r   r  rR  r  r|  r   rA   r   r   r   r#   r   r   r   rH   rI   r   r  s        r1   test_index_scalar_assignz$_TestGetSet.test_index_scalar_assign  s    MM&!!HV   	CJJ.XZ Z ZV  ###	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	199;;*****s   2A77A;>A;N)r   r   r   r  r  r  r  r  rN   r3   r1   r{  r{    s`        # # #,$# $# $#L# # #  $
+ 
+ 
+ 
+ 
+r3   r{  c                       e Zd Zd ZdS )
_TestSolvec                    d}t           j                            d           t          ||ft                    }t           j                            |          }t           j                            |dz
            dt           j                            |dz
            z  z   }t           j                            |          }t          t          |                    D ]}||         |||f<   t          t          |                    D ]/}||         |||dz   f<   t          ||                   ||dz   |f<   0| 	                    |          }t                      5 }|                    t          d           t          |                              |          }d d d            n# 1 swxY w Y   t          ||z  |           d S )Nr  r   r3  r   r  r  )rA   r   r[   r   r  r  r   r   r   r   r   r   r#   r)   solver   )r   r  rH   r7   r8   r  r  r   s           r1   
test_solvez_TestSolve.test_solve	  s    
	q1Q%w'''INN1INN1Q329>>!A##6#6 66INN1s1vv 	 	AqTAacFFs1vv 	' 	'AtAa!eH 1Aac!eHHMM!   	!CJJ.?A A AQa  A	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	AaC"""""s   >F%%F),F)N)r   r   r   r  rN   r3   r1   r  r   	  s#        # # # # #r3   r  c                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )_TestSlicingc                 F   t          |                     dt          j                  dddf         j        t          j                   t          |                     dt          j                  dddf         j        t          j                   t          |                     dt          j                  dddf         j        t          j                   t          |                     dt          j                  dddf         j        t          j                   d S )Nr   rM   r3  r   r   r/  )r   r   rA   r3  r6   rR   r0  r   r   s    r1   test_dtype_preservationz$_TestSlicing.test_dtype_preservation	  s    T]]6]::1QqS5AGRRRT]]6]::1QqS5AGRRRT]]6]<<QqsUCI2:VVVT]]6]<<QqsUCI2:VVVVVr3   c                    t           j        t           j        t           j        t           j        f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        |           d S )NrU  r3  r   r]   rA   r3  rR   r0  r   r   r   r6   r   dtrH   s      r1   #test_dtype_preservation_empty_slicez0_TestSlicing.test_dtype_preservation_empty_slice	  s     8RXrz2:> 	0 	0BfB//A111a!e8*B///1Qq5!!!8*B///1a!e8*B///1Qq5!8*B////	0 	0r3   c           	         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/  rM   r   r]   r   r]   r   rR  r   ry  rD  rf  r   rR  r   r   r      ry  rz  )r'   r   r  r   r   r   r(   rH   r   r  r  slicer   rI   rH   r  r^  r  r  s          r1   test_get_horiz_slicez!_TestSlicing.test_get_horiz_slice(	  s   VC[[((2..//MM!1QT7AadGOO$5$56661Q!V9a1Q3i&7&7&9&9:::IIIyyy)))YYY?@@MM!1Q!V9a1Q3i&7&7&9&9::: IIIyyy)))YYY?@@MM!1Q!V9a1Q3i&7&7&9&9:::1QV9a233ik222 	j!-%++r1BCCCj!-!U1a[[1ABBBBBr3   c           	      t   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/  rM   r]   r   r   r  r  rD  rf  r   r  r  r   r  ry  rz  )
r   r  r   r   r   r   r   r  r  r  r  s          r1   test_get_vert_slicez _TestSlicing.test_get_vert_slice<	  s$   3KK2&&MM!1QqS1#X;!A#q&	(9(9(;(;<<<1QQQV9a1goo&7&7888999iiiIII>??MM!1QqS1#X;!A#q&	(9(9(;(;<<<1QQQV9a1goo&7&7888 999iiiIII>??MM!1QQQV9a1goo&7&78881RSS1#X;"##q&	(9(9(;(;<<< 	j!-%++r1BCCCj!-!U1a[[1ABBBBBr3   c                    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/  rM   r]   r   r   r   r   r  r  rD  rf  )r   r  r   r   r   r   )r   rI   rH   r  r  s        r1   test_get_slicesz_TestSlicing.test_get_slicesQ	  s   3KK2&&MM!1QqS!A#X;..00!AaC1H+>>>1QRR"W:--//122ss7<<<1SbS!""W:--//3B37<<< 999iiiIII>??MM!1QqS!A#X;!A#qs((;(;(=(=>>>1QQQU8Qqqq!""uX%5%5%7%788888r3   c                 4   t           j                            dd          }	 |                     |          ddddddf         }n"# t          $ r t          j        d          w xY wt          |                                |ddddddf                    d S )Nr  r      r]   r  r   feature not implemented)	rA   r   r  r   r   r   r   r   r   )r   v0r  s      r1    test_non_unit_stride_2d_indexingz-_TestSlicing.test_non_unit_stride_2d_indexing^	  s    Y^^B##	9b!!!Bq&!Bq&.1AA 	9 	9 	9+7888	9 	199;;1R61R6>(:;;;;;s   #A A%c                    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/  rM   r  r  r  r   r   r]   r   rR  r|  r   rA  )	r'   r   r  r   r   r   r   r  r   )r   rI   rH   r  s       r1   test_slicing_2z_TestSlicing.test_slicing_2i	  s   VBZZ''"--..MM! 	QsVQsV$$$QtWag&&&QuXah'''QuRyy|_QuX...Qr%))|_QuX...QuRyyr*+AeH555 	Qq!!!tW__&&!QQQ$000Qq!B$wZ''))1Q"W:666QuQxx2~&..00!AqtG*=== 	Qqqq!tW__&&!!!Q$000QqsAvY&&((!AaCF)444QqsBwZ''))1QqS"W:666QqtQwZ''))1QrT1W:666QqtU1XX~&..00!AbD!G*=== 	QqsAaCx[((**Aac1Q3hK888Qqrr122vY&&((!ABBF)444Qrr2A2vY&&((!BQBF)444QqtRaRx[((**AadBQBhK888 	Qq!!!tW__&&!QQQ$000Qr111uX%%''2qqq5222QuRyy!!!|_,,.."aaa%999 	QqsV^^%%q1v...QqtW__&&!B$000 $q''$q''$''Qq!!!tW__&&!A#qqq&	222Qqqq!tW__&&!!!QqS&	22222r3   c                 l   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	          j        d          g}fd}t          |          D ]\  }} ||           fd}t          |          D ]&\  }}t          |          D ]\  }} |||           'g }	t          j
        dgdz   D ]1\  }}}
|
dk    r|	                    t          |||
                     2|	D ]&} |||            ||d            |d|           'd S )Nr  r/  rM   r]   r   r   rm  r  r{  r   rR  r   r   rA  rP  c                    |          }|          }|j         dk    r t          ||t          |                      d S |j        dk    r|j        dk    rd S t	          |                                |t          |                      d S NrN   r   )r   r   r(  rc   r   r   )rE   r7   r8   rH   rI   s      r1   check_1z,_TestSlicing.test_slicing_3.<locals>.check_1	  s~    !A!Aw"}}Q477+++++6Q;;16Q;;D&qyy{{AtAww?????r3   c                    t          | t          j                  rt          |           }n| }t          |t          j                  rt          |          }n|}| |f         }||f         }|j        dk    r"t          ||t          | |f                     d S |j        dk    r|j        dk    rd S t          |	                                |t          | |f                     d S r  )
r@   rA   r
   intr   r   r(  rc   r   r   )rE   rJ   aibir7   r8   rH   rI   s         r1   check_2z,_TestSlicing.test_slicing_3.<locals>.check_2	  s     !RZ(( VV!RZ(( VV!Q$A"b&	Aw"}}Q4A<<000006Q;;16Q;;D&qyy{{AtQF||DDDDDr3   )
Nr   r   r]   r/  rm  r   r   r/  i)r'   r   r  r   rA   s_r   r   	enumerate	itertoolsproductrC   r  )r   r  slicesr  r  rE   r  r  rJ   extra_slicesr8  rH   rI   s              @@r1   test_slicing_3z_TestSlicing.test_slicing_3	  sL   VBZZ''"--..MM!URaR&"QqS'2abb62add8RU)R!WQqV*bBiEQrEQ111r!A#wB))RWR[[	*		@ 		@ 		@ 		@ 		@ 		@ f%% 	 	DAqGAJJJJ	E 	E 	E 	E 	E 	E0 f%% 	 	DAq!&))  11  ( -= ,>>?,@ B 	0 	0GAq!AvvaA//// 	 	AGAqMMMGArNNNGBNNNN	 	r3   c                    t          t          d                              dd                    }|                     |          }t	          |d         j        |d         j                   t	          |d         j        |d         j                   t	          |d         j        |d         j                   t	          |d         j        |d         j                   t	          |dd df         j        |dd df         j                   t	          |ddd f         j        |ddd f         j                   t	          |dd ddf         j        |dd ddf         j                   t	          |dddd f         j        |dddd f         j                   t          |d	         |d	                    t          |d
         |d
                    d S )Nr  r/  rM   .).)r   .).r   r   )r   r   .)r   .r   )r'   r   r  r   r   rH   r   r   rJ   rE   s      r1   test_ellipsis_slicingz"_TestSlicing.test_ellipsis_slicing	  s   VBZZ''"--..MM!1S68QsVX...1T79agi0001V9;&	4441V9;&	4441QRRW:<122s76661S!""W:<376661QRRCZ=?Aabb!SjMO<<<1QQRRZ=?AaabbjMO<<<Qy\1Y<000Qy\1Y<00000r3   c                    t          t          d                              dd                    }|                     |          }t	          |d         j        |d d d d f         j                   t	          |d         j        |d d d d f         j                   t	          |d         j        |dd d f         j                   t	          |dd ddf         j        |dd d d f         j                   t	          |dddd f         j        |d d dd f         j                   t	          |d	         j        |d d df         j                   d S )
Nr  r/  rM   )..)...)r   ..r   .)..r   )r'   r   r  r   r   rH   r  s      r1   test_multiple_ellipsis_slicingz+_TestSlicing.test_multiple_ellipsis_slicing	  s>   VBZZ''"--..MM!1X;=!AAAqqqD')4441]+-qAAAwy9991[>+Qq!!!tWY7771QRRc\?,aAAAhj9991S#qrr\?,a122hj9991[>+Qqqq!tWY77777r3   N)r   r   r   r  r  r  r  r  r  r  r  r  r  rN   r3   r1   r  r  	  s        W W W0 0 0C C C(C C C*9 9 9	< 	< 	<+3 +3 +3Z@ @ @D1 1 1$	8 	8 	8 	8 	8r3   r  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
_TestSlicingAssignc                    |                      d          }t          j        d          }t                      5 }|                    t
          d           ||fD ]2}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<   3	 d d d            n# 1 swxY w Y   t          |                                |           d S )	Nr.  r  r   r   rR  r   r|  r   r  r  s        r1   test_slice_scalar_assignz+_TestSlicingAssign.test_slice_scalar_assign	  s4   MM&!!HV   	 CJJ.XZ Z ZV    !A#a%!A#a%!A#a%!ABB$!%R%( 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	199;;*****s   ABBBc                      d\   fd}dt          d          fdt          d dd          fdt          dd          ft          d          t          dd          ffD ]\  }} |||           d S )	Nr  c                 X   d| d|}                     f          }t                      5 }|                    t          d           d|| |f<   d d d            n# 1 swxY w Y   t	          j        f          }d|| |f<   t          |                                ||           d S )Nzi=z; j=r  r   r  )r   r   r   r#   rA   r   r   r   )	r  r  r.   rH   r   rI   r;  r  r   s	         r1   r  z9_TestSlicingAssign.test_slice_assign_2.<locals>._test_set
  s     "#!!QQ'Cq!f%%A"$$ 

2\^ ^ ^!Q$               !Q  AAadG%aiikk1cBBBBBBs   #AA"%A"r]   r   rM   rR  r/  r   )r  r   r  s   `   @@r1   test_slice_assign_2z&_TestSlicingAssign.test_slice_assign_2
  s    1		C 		C 		C 		C 		C 		C 		C q]QdB(:(:$;aq"=NAhha-/ 	 	DAqIaOOOO	 	r3   c                    |                      d          }t                      5 }|                    t          d           d|d<   d|d<   d|d<   d	|d
<   |d	z  }|dd d f         |dd d f<   t	          |dd d f         j        |dd d f         j                   |d	z  }|d dd df         |d d d d f<   t	          t          j        d          |d         z   |j                   |d	z  }|dd d f         j        |d ddf<   t	          |dd d f         j        j        |d ddf         j                   d d d            d S # 1 swxY w Y   d S )Nr  r  r]   rl  rz  r  r   r]   r   rM   r  r   r   r   )	r   r   r   r#   r   rH   rA   r   r  )r   rI   r   rH   s       r1   test_self_self_assignmentz,_TestSlicingAssign.test_self_self_assignment
  s    MM%     	7CJJ.XZ Z ZAcFAcFAcFAcFBAqsVAacFq111vx1QQQ3222BArr"1"uXAaaacFrx37===BA111vxAcrc!eHq111vxz1SbSU8:666%	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   DEE
Ec                    |                      d          }t          g dg dg dg dg          }ddgddgg}t                      5 }|                    t          d	           d
|d<   d|d<   d|d<   ||z   |d d d d f<   t          |                                |           t          t          |                    |d dd df<   t          |                                d dd df         |           d d d            d S # 1 swxY w Y   d S )Nr  rM   r   r   )r   r   ry  )r      r   rD  r   r   rR  r  r/  rl  r   r  rz  r  r]   )r   r   r   r   r#   r   r   r   )r   rI   r   blockr   s        r1   test_slice_assignmentz(_TestSlicingAssign.test_slice_assignment/
  sy   MM%  (((!''"((!''# $ $ A!u   
	;CJJ.XZ Z ZAcFAcFAcFqSAaaacFqyy{{H555!%,,//Abqb!eHqyy{{2A2rr62E:::
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	;s   B.DD	Dc                    |                      d          }t                      5 }|                    t          d           d|d<   d|d<   d|d<   d	|d
<   t	          t          j        d                    |d d<   d d d            n# 1 swxY w Y   t          g dg dg dg dg          }t          |	                                |           d S )Nr  r  r/  rl  r   r  rz  r  rM   r  r1  r  rf  r  )
r   r   r   r#   r   rA   r!   r   r   r   )r   rI   r   r   s       r1   "test_sparsity_modifying_assignmentz5_TestSlicingAssign.test_sparsity_modifying_assignmentC
  s   MM%     	*CJJ.XZ Z ZAcFAcFAcFAcFrvayy))AbqbE	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* '''''''''(((;<<199;;11111s   ABB
B
c                    |                      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	          j        d          g}t                      5 }|                    t          d           t          |          D ]?\  }}|||<   |||<   t          |                                |t          |                     @t          |          D ]r\  }}t          |          D ]]\  }}	d|z  d|dz   z  z   |||	f<   d|z  d|dz   z  z   |||	f<   t          |                                |t          ||	f                     ^st          ddd          |d
dddf<   t          ddd          |d
dddf<   t          |                                |           t	          j        dd	d          d d d f         |dd	dd
f<   t	          j        dd	d          d d          |dd	dd
f<   t          |                                |           d d d            n# 1 swxY w Y   t!          t"          |j        dt'          t          d                               t!          t"          |j        dt          d                     t!          t"          |j        d
t)          d           ft'          t          d                               t!          t"          |j        t)          d           dft'          t          d                               t!          t"          |j        t)          d           df|                                           t!          t"          |j        g dg dgg dfg d           t!          t"          |j        g dg dg dgg dg dgfg d           t!          t"          |j        t)          d          d
fddgddgg           d S )Nr  r]   r   r   r{  r   rR  r   r/  r   rA  rP  r  rM     rl  d   rw  r  rh  )rR  r   r   r   r]   rR  )r   r   r   rQ  )r   r   r   r   rA   r  r   r   r   r#   r  r   r   r(  r   r   r   r   r  listr  r   )
r   rH   rI   r  r  r   r  rE   r  rJ   s
             r1   test_set_slicez!_TestSlicingAssign.test_set_sliceQ
  s   MM&!!%''((URaR&"QqS'2abb62add8QqV*bBiEQrEQ111r!A#wB))RWR[[*
    	/CJJ.XZ Z Z!&)) < <1!!"199;;477;;;;!&)) E E1%f-- E EDAqTD!A#J.AacFTD!A#J.AacF&qyy{{AtQF||DDDDE
 !B??Aa2aiL B??Aa2aiLqyy{{A...)Aq!,,QQQW5Aa!eQhK)Aq!,,QQQ/Aa!eQhKqyy{{A...'	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/, 	j!-eCjj9I9IJJJj!-EEEj!-!U4[[1A5::&&	( 	( 	(j!-%++q1A5::&&	( 	( 	(j!-%++q1A16688LLLj!-!		999-yyy9<<<	I 	I 	Ij!-!		999iii8!		999-/09			; 	; 	; 	j!-%((A1v1v&	( 	( 	( 	( 	(s   F1JJJc                     |                      t          j        d                    }|                      d          }||dd df<   t          |                                g dg dg           d S )Nr  r  r   r]   r   r   r   rf  )r   rA   r  r   r   r  s      r1   test_assign_empty_spmatrixz-_TestSlicingAssign.test_assign_empty_spmatrix
  sh    MM"'&//**MM&!!!RaR%199;;III(>?????r3   c                     |                      t          j        d                    }t          j        d          }||d d df<   ||dd d f<   t	          |                                g dg dg dg           d S )Nr  r   r   r   r  rD  )r   rA   r  r   r   r   r   rH   r7   s      r1   test_assign_1d_slicez'_TestSlicingAssign.test_assign_1d_slice
  s{    MM"'&//**HQKK!!!Q$!QQQ$199;;IIIyyy(IJJJJJr3   N)r   r   r   r  r  r  r  r  r  r  r  rN   r3   r1   r  r  	  s        + + +  $7 7 70; ; ;(2 2 2,( ,( ,(\@ @ @K K K K Kr3   r  c                   N    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )_TestFancyIndexingzTests fancy indexing features.  The tests for any matrix formats
    that implement these features should derive from this class.
    c                    t           j        t           j        t           j        t           j        f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        |           d S )NrU  r3  F)FFFr  r  s      r1   #test_dtype_preservation_empty_indexz6_TestFancyIndexing.test_dtype_preservation_empty_index
  s     8RXrz2:> 	- 	-BfB//A111uen,-3R888000!!!34:B???111b5,,,2qqq5,,,,	- 	-r3   c                 H   |                      t          j        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r]   r  rw  rh  )r   rA   r   r   r  r   r  r  rF  s     r1   test_bad_indexz!_TestFancyIndexing.test_bad_index
  s    MM"(Aq6**++z:y91=%PPPz:y91=*UUUz:. yy,,,/	1 	1 	1 	1 	1r3   c           
         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                    }t	          |||f                                         |||f                    t	          |g gg gf                                         |g gg gf                    d S )Nr  r/  rM   r   r   r   r]   rA  )r]   r{  r   r   rR  r|  rC  r{  rP  r   r3  )r'   r   r  r   r   r   r   r  r   rA   r  )r   rI   rH   r  r  s        r1   test_fancy_indexingz&_TestFancyIndexing.test_fancy_indexing
  s   VBZZ''"--..MM! 	Q1vY&&((!QF)444 	Qq1a&y\))++Qq1a&y\:::QrAr7{^++--qaW~>>>QuRyy1b')*2244aQGnEEEQr5!R>>)*2244aQGnEEEQuRyy%B..0199;;QrAr7{^LLL 	Qqqq---'(0022Aaaa6F4GHHHQqsQCx[((**AacA3hK888QqsRH}%--//1Q3R=1ABBBQqsE2r(OO+,4466!A#Bx-8HIII 	Q1vqy\))++Q1vqy\:::Q2w{^++--q!R"~>>>QuaW~~r)*2244aBnEEEQ2wb		)*2244aBnEEEQuaW~~uRyy0199;;Q2w{^LLL 	Q1vqqqy\))++Q1vqqqy\:::Q2w"}%--//Ar7AbD=1ABBBQuaW~~qt+,44661b'1R4-8HIII 	WQ1v1v~.//Aq6Aq6>1BCCCWQBx!R0122Ar2hB6G4HIIIAeRHoo2w./00!RHq"g4E2F	
 	
 	
 	Ar2hq"g./00!RHq"g4E2F	
 	
 	
 	AeRHoouaW~~5677B8aW;L9M	
 	
 	

 	QaSzAq6)*2244a!qc
QF8J6KLLLtbTB4 1b')*2244tbTB4 1b')*	
 	
 	
 	ebTB4"&''!R0199;;tbTB4 1b')*	
 	
 	
 	tbTB4 %B..0199;;tbTB4 1b')*	
 	
 	
 	ebTB4"&''2w78@@BBtbTB4 1b')*	
 	
 	
 	Q1vY&&((!QF)444QBx[((**Ar2hK888Qub"X'//111b"X;??? 	q!faaaiLQF#++--q!Q|AAA1vI/F	
 	
 	
 	r2hkN111q"g:&..00!RHaaaK.QG2L	
 	
 	
 	eRHooqqq !!!!UAr7^^"34<<>>r2hkN111q"g:&	
 	
 	
 	aaa!QiL!Q#++--qQF|QFAAAI/F	
 	
 	
 	aaa"bkNAr7AAA:&..00!AAABxK.!R!!!2L	
 	
 	
 	aaaBx !%B..!!!"34<<>>aaa"bkNAr7AAA:&	
 	
 	
 $q''$q''$''Qq!!!tW__&&!A#qqq&	222Qqqq!tW__&&!!!QqS&	222 HqcU#&&&Qq!tW__&&!Q$000 	QtbTz]**,,ard
m<<<<<r3   c                    t           j                            d           d}d}d}t          t           j                            ||                    }t          j        ||dk              }t           j                            | dz   ||          }t           j                            | dz   ||          }|                     |          }|||f         }t          |          r|	                                }t          ||||f                    ||z   }	||z
  }
t          t          |j        |	|f           t          t          |j        ||
f           d S )NrZ   r  ry  rR  r  r   r  )rA   r   r[   r'   r  r  r_   r   r"   r   r   r   r  r  )r   NUM_SAMPLESr"  r%  r^  Ir  r<  SIJI_badJ_bads              r1   test_fancy_indexing_randomizedz1_TestFancyIndexing.test_fancy_indexing_randomized  s4   
	tRY^^Aa(())K1s7##Iqb1fak::Iqb1fak::MM!!fc?? 	 ++--CS!AaC&!!!AAj!-%;;;j!-!E;;;;;r3   c                    t           j                            d           t          t	          d                              dd                    }|                     |          }t          j        t           j                            ddd          t                    }t          j        t           j                            ddd          t                    }t          j        t           j                            ddd	          t                    }t          t          ||                   ||                    t          t          |d d |f                   |d d |f                    t          t          ||                   ||                    t          t          ||d
k                       ||d
k                        t          j        g d          }t          j        g d          }t          t          |||f                   |||f                    t          j        dt                    }t          j        dt                    }d|d<   t          j        dt                    }d|d<   t          ||         t          j        g                      t          t          |j        |           t          t          |j        |           t          t          t           f|j        |df           d S )NrZ   r  r/  rM   r   r]   r  r3  r  r|  )TFTTF)
FTTFTFFFFF)ry  r  Tr  )r   r   r   )rA   r   r[   r'   r   r  r   r   r_   r   r   r   r   r   r  r  r   )	r   rI   rH   r  r  r  Z1Z2Z3s	            r1   test_fancy_indexing_booleanz._TestFancyIndexing.test_fancy_indexing_boolean'  st   
	tVBZZ''"--..MM!HRY&&q!!&44DAAAHRY&&q!"&55TBBBHRY&&q!'&::$GGGWQqT]]AaD)))WQqqq!tW%%qAw///WQqT]]AaD)))WQq1uX&&!a%111H55566H 9 9 9 : : 	WQq!tW%%qAw///XgT***XgT***4XgT***4QrUBHRLL)))j!-444j!-444z:.1vFFFFFr3   c                    t           j                            d           t          t	          d                              dd                    }|                     |          }t          j        t           j                            ddd          t          	          }t          |          }t          t          ||                   ||                    t          t          ||d
k                       ||d
k                        t          j        t           j                            ddd          t          	          }t          j        t           j                            ddd          t          	          }t          |          }t          |          }t          t          |j        |           t          t          |j        |           t          t          t           f|j        |df           d S )NrZ   r  r/  rM   r   r]   r  r  r3  r|  )r/  r  )ry  rM   r   )rA   r   r[   r'   r   r  r   r   r_   r   r   r   r   r   r  r  r   )	r   rI   rH   r  XspZr  ZspYsps	            r1   "test_fancy_indexing_sparse_booleanz5_TestFancyIndexing.test_fancy_indexing_sparse_booleanG  s}   
	tVBZZ''"--..MM!HRY&&q!'&::$GGGmmWQsV__ad+++WQq1uX&&!a%111HRY&&q!'&::$GGGHRY&&q!'&::$GGGmmmmj!-555j!-555z:.QxHHHHHr3   c                    |                      t          g dg dg dg                    }t          j        |                    d                    dk    }t          |d d |f         j        ddgddgddgg           d S )Nr1  r  r   r   )r   r   rA   ravelr  r   rH   )r   r   desired_colss      r1   #test_fancy_indexing_regression_3087z6_TestFancyIndexing.test_fancy_indexing_regression_3087^  s    mmE999gggwww"?@@AAx

++a/SL)+q!fq!fq!f-EFFFFFr3   c           	          |                      t          ddgddgg                    }t          t          |j        dt          j        ddg                     d S )Nr   r   rl  r]   )r   r   r   r   r  rA   r   s     r1   test_fancy_indexing_seq_assignz1_TestFancyIndexing.test_fancy_indexing_seq_assignc  sP    mmEAq6Aq6"23344j#/628QqE??KKKKKr3   c                 f   |                      t          ddgddgg                    }t                      5 }|                    t          d           |ddgddgf         |ddgddgf<   d d d            n# 1 swxY w Y   t          t          |          t          ddgddgg                     d S )Nr   r   r]   r   zChanging the sparsity structure)r   r   r   r   r#   r   r   )r   r   r   s      r1   test_fancy_indexing_2d_assignz0_TestFancyIndexing.test_fancy_indexing_2d_assigng  s    mmEAq6Aq6"23344   	6CJJ.8: : :"%q!fq!fn"5CAA	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	WS\\51a&1a&)9#:#:;;;;;s   3A66A:=A:c                     t          t          d                              dd                    }d|dd d f<   d|d d df<   d|d<   |                     |          }t	          j        g d          }t          t          ||                   ||                    t	          j        g t          	          }t          t          ||                   ||                    t          t          |||f                   |||f                    t	          j        g d
t          	          d d d f         }t          t          |||f                   |||f                    t          t          |||f                   |||f                    d S )Nr  r/  rM   r   r   r]   r   ry  FFFFFr3  r   r   r]   r   rR  	r'   r   r  r   rA   r   r   r   r  r   rI   rH   r  r  s        r1   test_fancy_indexing_emptyz,_TestFancyIndexing.test_fancy_indexing_emptyp  sj   VBZZ''"--..!AAA#!!!A##MM!H88899WQqT]]AaD)))HRs###WQqT]]AaD)))WQq!tW%%qAw///H___C00048WQq!tW%%qAw///WQq!tW%%qAw/////r3   N)r   r   r   r`  r  r  r  r  r
  r  r  r  r  r  rN   r3   r1   r  r  
  s         - - -1 1 1h= h= h=T< < <4G G G@I I I.G G G
L L L< < <0 0 0 0 0r3   r  c              #      K   t          | d          r| j        sdV  dS dV  | j                                        }d| _        |                                  t          || j        d           dS )zIChecks that sorted indices property is retained through an operation
    has_sorted_indicesNFz'Expected sorted indices, found unsorted)hasattrr!  rY  r   sort_indicesr   )r  rY  s     r1   check_remains_sortedr$    s       1*++ 13G 	EEEinnG ANNw	@B B B B Br3   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )_TestFancyIndexingAssignc                     |                      t          j        ddg                    }t          t          t
          t          f|j        dd           t          t          t
          t          f|j        dd           d S )Nr/  r  r]   r  )r   rA   r   r   r  r   r  r  rF  s     r1   test_bad_index_assignz._TestFancyIndexingAssign.test_bad_index_assign  sc    MM"(Aq6**++z:y91=%QRSSSz:y91=*VWXXXXXr3   c                 l    d\   fd}dt          d dd          ft          j        d          t          dd          ft          d	d          t          dd          ffD ]\  }} |||           t          j        d          t          j        d          fd
fD ]\  }} |||           d S )Nr  c                                         f          }t          t          j        f                    }t	                      5 }|                    t          d           d|| |f<   t          |          5  d|| |f<   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |	                                |           d S Nr  r   )
r   r'   rA   r   r   r   r#   r$  r   r   )r  r  rH   rI   r   r;  r  r   s        r1   _test_set_slicezI_TestFancyIndexingAssign.test_fancy_indexing_set.<locals>._test_set_slice  sM   q!f%%A1a&))**A"$$  

2\^ ^ ^!Q$)!,,    AadG                             	                              &aiikk155555s6   
2B'<BB'B	B'B	B''B+.B+rQ  rM   rR  r   r/  r   r]   )r  r  )r  rA   r   r   r,  r  r  r;  r  s   `   @@r1   test_fancy_indexing_setz0_TestFancyIndexingAssign.test_fancy_indexing_set  s    1		6 		6 		6 		6 		6 		6 		6  tR!3!34illE!RLL1Aqkk5B<<02 	" 	"DAq OAq!!!!illBIaLL13IJ 	" 	"DAqOAq!!!!	" 	"r3   c                 `      fd}t           D ]} |t          j        |                      d S )Nc                                         d|           }t                      5 }|                    t          d           |                     d          |ddgddgf<   t          |                                |                     d          dz             |                     d          |ddddf<   t          |                                |                     d          dz             |                     d          |d	<   t          |                                |                     d          dz  |                     d          z              d d d            d S # 1 swxY w Y   d S )
Nr.  r3  r  r   r   r]   r  rR  rV  )r   r   r   r#   r  r   r  r  s      r1   r   zD_TestFancyIndexingAssign.test_fancy_assignment_dtypes.<locals>.check  s   fE22A"$$ G

2\^ ^ ^!&A1Q%1+QUUWWejjmmAo666"ZZ__!A#ac'
QUUWWejjmmAo666C#QUUWWejjmmAo

1&EFFFG G G G G G G G G G G G G G G G G Gs   D.E""E&)E&r  r   s   `  r1   test_fancy_assignment_dtypesz5_TestFancyIndexingAssign.test_fancy_assignment_dtypes  sW    
	G 
	G 
	G 
	G 
	G & 	# 	#EE"(5//""""	# 	#r3   c                    |                      d          }|                      t          dd                    }g d}d}t          |          }t                      5 }|                    t
          d           t          |          5  ||df         j        |d|f<   ||df         j        |d|f<   ||df         j        |d|f<   d d d            n# 1 swxY w Y   t          |	                                |j        	                                           |                      d	          }t          |          5  d
dg|dddf<   d d d            n# 1 swxY w Y   t          |	                                g dg dg           |                      d          }t          |          5  d
gdgg|dddf<   d d d            n# 1 swxY w Y   t          |	                                ddgdd
gddgg           |                      d          }t          t          j        d                    }t          |          5  ||fD ]}g d|g dg df<   	 d d d            n# 1 swxY w Y   t          |	                                |           |                      d          }t          |          5  g d|d<   d d d            n# 1 swxY w Y   t          |                                d           t          t          j        d                    }g d|d<   t          |	                                |           d d d            d S # 1 swxY w Y   d S )Nr  r   rR  r  r  r   r   r]   r  rM   r  rD  )r   rM   r  rU  r  rx  rw  )rw  r  ry  )r   r!   r   r   r   r#   r$  r  r   r   r'   rA   r   r   r  )r   rH   rI   i0i1i2r   r  s           r1   test_sequence_assignmentz1_TestFancyIndexingAssign.test_sequence_assignment  s   MM%  MM#a((##WW2YY   $	/CJJ.XZ Z Z%a(( $ $BqD')!B$BqD')!B$BqD')!B$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ qyy{{ACKKMM::: e$$A%a(( # #r7!AaC%# # # # # # # # # # # # # # #qyy{{YYY,DEEE e$$A%a(( ' 'D";!A#a%' ' ' ' ' ' ' ' ' ' ' ' ' ' 'qyy{{aVaWq"g,FGGG e$$A%))A%a(( 2 2Q 2 2A*1''Agggwww&''22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 qyy{{A... f%%A%a(( 4 4*3))&'4 4 4 4 4 4 4 4 4 4 4 4 4 4 4+++&))**A&/iiA"#qyy{{A...I$	/ $	/ $	/ $	/ $	/ $	/ $	/ $	/ $	/ $	/ $	/ $	/ $	/ $	/ $	/ $	/ $	/ $	/s   +M=CMC	MC	A M8EME	ME	AM'G5MG	MG		A3M<IMI"	"M%I"	&A	M/K7MK	M
K	A/MMMc                    t          t          d                              dd                    }d|dd d f<   d|d d df<   d|d<   |                     |          }t	          j        g d          }d	||<   t          t          |          |           t	          j        g t          
          }d	||<   t          t          |          |           d	|||f<   t          t          |          |           t	          j        g dt          
          d d d f         }d	|||f<   t          t          |          |           d	|||f<   t          t          |          |           d S )Nr  r/  rM   r   r   r]   r  r  *   r3  r  r  r  s        r1   test_fancy_assign_emptyz0_TestFancyIndexingAssign.test_fancy_assign_empty  s]   VBZZ''"--..!AAA#!!!A##MM!H88899!WQZZ###HRs###!WQZZ###!A#WQZZ###H___C00048!A#WQZZ###!A#WQZZ#####r3   N)r   r   r   r(  r.  r1  r6  r9  rN   r3   r1   r&  r&    sc        Y Y Y
" " "*# # # ,/ ,/ ,/\$ $ $ $ $r3   r&  c                       e Zd Zd ZdS )_TestFancyMultidimc           
         t          j        dgdgdgg          t          j        g d          ft          j        dgdgdgg          t          j        g dg          ft          j        g dg          t          j        dgdgdgg          ft          j        g d          t          j        dgdgdgg          ft          j        g dg dg          t          j        g dg dg          fg}|D ]H\  }}t           j                            d	           t	          t           j                            d
d                    }|                     |          }|||f         }t          |          r|                                }t          ||||f                    |d
z   }|dz   }t          t          |j        ||f           t          t          |j        ||f           t          t          |j        ||gt          d           f           t          t          |j        t          d           ||gf           Jd S )Nr   r]   r   r   rR  r]   rw  rR  r/  ry  r   r]   r   r   rZ   r/  rz  )rA   r   r   r[   r'   r  r   r"   r   r   r   r  r  r  )	r   setsr  r  r^  r<  r  r  r  s	            r1   test_fancy_indexing_ndarrayz._TestFancyMultidim.test_fancy_indexing_ndarray  s(   XsQC!o&&(;(;<XsQC!o&&)))(=(=>Xyyyk""BHqcA3_$=$=>Xiii  "(QC!qc?";";<Xyyy))),--Xyyy))),--/  	L 	LDAqINN4   1--..Aa  AAaC&C# $kkmma!f%%%EEEE*ameAY???*amaY??? *amq!feDkk5JKKK*ameDkkAq65JKKKK%	L 	Lr3   N)r   r   r   rA  rN   r3   r1   r;  r;    s(        L L L L Lr3   r;  c                   &    e Zd Zd Zd Zd Zd ZdS )_TestFancyMultidimAssignc                    t           j                            d           t          t           j                            dd                    }|                     |          }t           j                            dd          }t          j        g dg dg          }t          j        g dg d	g          }t          |          5  ||||f<   d d d            n# 1 swxY w Y   ||||f<   t          |	                                |           |dz   }|dz   }g d}t          |          5  ||||f<   d d d            n# 1 swxY w Y   ||||f<   t          |	                                |           t          |          5  d|||f<   d d d            n# 1 swxY w Y   d|||f<   t          |	                                |           t          t          |j        ||f|           t          t          |j        ||f|           d S )
NrZ   r/  rz  r]   r   rw  r=  r>  r?  )rA   r   r[   r'   r  r   r   r$  r   r   r   r  r  	r   r^  r<  r  r  r  r  r  r  s	            r1   test_fancy_assign_ndarrayz2_TestFancyMultidimAssign.test_fancy_assign_ndarray%  s   
	tRY^^Aq))**MM!INN1a  Hiii+,,Hiii+,,!!$$ 	 	AacF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	!A#QYY[[!$$$AAII!!$$ 	 	AacF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	!A#QYY[[!$$$!!$$ 	 	AacF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	!A#QYY[[!$$$j!-%A>>>j!-!EA>>>>>s6   CC C*D>>EEFFFc                      d\   fd}t          j        ddgddgg          ddgft          j        ddg          ddgddggfg dg d	gg d
g dgffD ]\  }} |||           d S )Nr  c                                         f          }t          |          5  t                      5 }|                    t          d           d|| |f<   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          t          j        f                    }d|| |f<   t          |	                                |           d S r+  )
r   r$  r   r   r#   r'   rA   r   r   r   )r  r  rH   r   rI   r;  r  r   s        r1   r,  zR_TestFancyMultidimAssign.test_fancy_indexing_multidim_set.<locals>._test_set_sliceI  sM   q!f%%A%a((  *;*=*= 

2\^ ^ ^!Q$                              1a&))**AAadG%aiikk155555s4   A=#A&A=&A*	*A=-A*	.A==BBr   r]   r   r   rR  rw  r   r]   rR  )r   rR  r   )rR  r   r]   )rA   r   r-  s   `   @@r1    test_fancy_indexing_multidim_setz9_TestFancyMultidimAssign.test_fancy_indexing_multidim_setF  s    1	6 	6 	6 	6 	6 	6 	6 hAA/001a&91a&))QFQF+;<#))YYY/)))YYY1GHJ 	" 	"DAq OAq!!!!	" 	"r3   c                    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             }g d}||||f<   ||||f<   t          |                                |           d|||f<   d|||f<   t          |                                |           t          t          |j
        ||f|           t          t          |j
        ||f|           d S )NrZ   r/  rz  r]   r   rw  r=  r>  r?  c                 &    g | ]}d  |D             S )c                     g | ]}|d z   S r/  rN   r  iis     r1   r  zN_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>.<listcomp>f      %%%R"q&%%%r3   rN   )r  r  s     r1   r  zC_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>f  '    111!%%1%%%111r3   c                 &    g | ]}d  |D             S )c                     g | ]}|d z   S rz  rN   r  jjs     r1   r  zN_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>.<listcomp>g  rQ  r3   rN   )r  r  s     r1   r  zC_TestFancyMultidimAssign.test_fancy_assign_list.<locals>.<listcomp>g  rR  r3   )rA   r   r[   r'   r  r   r   r   r   r  r  rE  s	            r1   test_fancy_assign_listz/_TestFancyMultidimAssign.test_fancy_assign_listX  s|   
	tRY^^Aq))**MM!INN1a  YY			"YY			"!A#!A#QYY[[!$$$11q11111q111II!A#!A#QYY[[!$$$!A#!A#QYY[[!$$$j!-%A>>>j!-!EA>>>>>r3   c                    t           j                            d           t          t           j                            dd                    }|                     |          }g d}g d}d |D             }d |D             }g d}t          j        d          d d d f         }t          t          |j	        |t          d           f|           t          t          |j	        t          d           |f|           d S )	NrZ   r/  rz  )r   r]   r   r   rR  r]   )r/  ry  r   r]   r   r   c                     g | ]}|d z   S rN  rN   rO  s     r1   r  zD_TestFancyMultidimAssign.test_fancy_assign_slice.<locals>.<listcomp>~      $$$Ba$$$r3   c                     g | ]}|d z   S rU  rN   rV  s     r1   r  zD_TestFancyMultidimAssign.test_fancy_assign_slice.<locals>.<listcomp>  r[  r3   )r   r]   r   rR  r/  ry  rz  )rA   r   r[   r'   r  r   r   r   r  r  r  )	r   r^  r<  r  r  r  r  C1C2s	            r1   test_fancy_assign_slicez0_TestFancyMultidimAssign.test_fancy_assign_sliceu  s    
	tRY^^Aq))**MM!$$!$$$$$!$$$"""Yq\\!!!T'"j!-%t1ErJJJj!-%++u1ErJJJJJr3   N)r   r   r   rF  rJ  rX  r_  rN   r3   r1   rC  rC  $  sV        ? ? ?B" " "$? ? ?:K K K K Kr3   rC  c                   $    e Zd ZdZd Zd Zd ZdS )_TestArithmeticz&
    Test real/complex arithmetic
    c                    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z                      d          d| j        z             t	          | j        j        dz                      d          d| j        j        z             t	          | j        j        dz                      d          d| j        j        z             |                     | 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   rA  g      @)g     ,@g      r   r   rd  r   )r   g      @r   r   r   r   )g     2@      r   r   r   r   r2  )g      ?r   r   r   ry  g      )rc       @r   r   r   g      @)r   rf  r   r   r   r   )re  r   r   r   r   r      rR   )
r   _TestArithmetic__A_TestArithmetic__Brb  r   rl   r\  r   _TestArithmetic__Asp_TestArithmetic__Bspr   s    r1   __arith_initz_TestArithmetic.__arith_init  s   4449993330002 4=> > 333999///5557 9EF F 999;;;5557779 ;DE E 	DHRK//88DHEEEDHM",44W==b>NOOODHM",44W==b>NOOO]]48,,
]]48,,


r3   c                    |                                   t          | j        | j        z                                   | j        | j        z              t          D ]}t          j	        d          5  | j        
                    |          }d d d            n# 1 swxY w Y   |                     |          }t          D ]}t          j        |t          j                  sMt          j	        d          5  | j        j        
                    |          }d d d            n# 1 swxY w Y   n| j        
                    |          }|                     |          }||z   }||z   }t          |j        |j                   t          |                                |           t          ||z   |           t          ||z   |           t          j        d          ||fv r$||z
  }||z
  }t          |j        |j                   t          |                                |           t          ||z
  |           t          ||z
  |           d S )Nr   r  r   )_TestArithmetic__arith_initr   rj  rk  r   rh  ri  r$   rA   r  rl   r   rd   r  r\  r   r6   	r   r7   rH   r  r8   rI   r  D1S1s	            r1   test_add_subz_TestArithmetic.test_add_sub  s    	Z$*$--//DH1D	
 	
 	

 "  	/  	/AX... ' 'HOOA&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '--""C% / /}Q(:;; +X666 4 4 HM00334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 **AmmA&& U3YRXbh///"2::<<444"372..."1s72... 8F##1v--U3YRXbh///"2::<<444"372..."1s72....9/	 	/  	/s$   0BB	B	5 D!!D%(D%c           
         |                                   t          | j        | j        j        z                                  | j        | j        j        z             t          D ]z}t          j
        d          5  | j                            |          }d d d            n# 1 swxY w Y   |                     |          }t          D ]}t          j        |t          j                  r| j                            |          }nLt          j
        d          5  | j        j                            |          }d d d            n# 1 swxY w Y   |                     |          }||j        z  }||j        z  }t!          |                                |dt#          |                                          z             t'          |j        |j                   |d S )Nr   r  g+=)atol)rn  r   rj  rk  r  r   rh  ri  r$   rA   r  rl   r   rd   r  r\  r   rE  rQ   r   r6   ro  s	            r1   test_muz_TestArithmetic.test_mu  s,    	DJ5>>@@8dhj0	2 	2 	2 " 	0 	0AX... ' 'HOOA&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '--""C% 0 0=B$677 4**AAX666 4 4 HM00334 4 4 4 4 4 4 4 4 4 4 4 4 4 4mmA&&W35[

b%*3r77;;==%8: : : :RXbh////0		0 	0s$   :B!!B%	(B%	 EE
E
N)r   r   r   r`  rn  rr  ru  rN   r3   r1   ra  ra    sL         - - -.)/ )/ )/V0 0 0 0 0r3   ra  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )_TestMinMaxc                 \   t           j        t           j        t           j        t           j        t           j        fD ]}t          j        d|                              dd          }|                     |          }t          |
                                d           t          |                                d           t          |
                                j        |           t          |                                j        |           |dz  }|                     |          }t          |
                                d           t          |                                d           |dz  }|                     |          }t          |
                                d	           t          |                                d           |                     t          j        d
d                              dd                    }t          |
                                d
           t          |
                                j        |j                   | }t          |                                d           |                     t          j        d
                    }t          |
                                d           t          |                                d           t          |                                j        |j                   t          j        dt                                        dd          }d|ddd d f<   |                     |          }t          |
                                d           t          |                                d           t          j        d          t          j        d          t          j        d          fD ]K}|                     |          }t          t           |j
                   t          t           |j                   Ld S )Nr  r3  r/  rR  r      r   iir   rM   r   r]   rl  r   rM   rM   r   )rA   r0  r   rR   r^   r2  r   r  r   r   rf   rQ   r6   r   r   r   r   )r   r6   r^  r  r  s        r1   test_minmaxz_TestMinMax.test_minmax  s3   j"*bh"-P 	% 	%E	"E***221Q77Aa  A!$$$"%%%......GAa  A#&&&!$$$FAa  A#&&&!$$$$ MM")Ar**221a8899QUUWWa   QUUWW]AG,,,BQUUWWb!!! MM"(1++&&QUUWWa   QUUWWa   QUUWW]AG,,, Ib&&&..q33!A#qqq&	MM!QUUWWa   QUUWWb!!! (6""BHW$5$5rx7H7HI 	- 	-Aa  A*ae,,,*ae,,,,	- 	-r3   c                 (   t          j        d                              dd          }d|dd d f<   d|d d df<   d|d<   d|d	<   |                     |          }g d
}|D ]~}t	          |                    |          j        |                    |d                     t	          |                    |          j        |                    |d                     t          j        dd                              dd          }|                     |          }|D ]~}t	          |                    |          j        |                    |d                     t	          |                    |          j        |                    |d                     t          j        d          }|                     |          }|D ]~}t	          |                    |          j        |                    |d                     t	          |                    |          j        |                    |d                     ddg}ddg}t          j        d          }|                     |          }|D ]:}t          t          |j        |           t          t          |j        |           ;|D ]x}t	          t          j        d          |                    |          j                   t	          t          j        d          |                    |          j                   yt          j        d          }|                     |          }|D ]:}t          t          |j        |           t          t          |j        |           ;|D ]x}t	          t          j        d          |                    |          j                   t	          t          j        d          |                    |          j                   yd S )Nr  r/  rM   r   r   r|  r  r   rV  )r   r   r   r   r  Tr	  3   )rM   r/  r   rz  r  r{  r  )rA   r   r  r   r   rQ   rH   rf   r   r   r   )r   r^  r  r  r  	axes_evenaxes_odds          r1   test_minmax_axisz_TestMinMax.test_minmax_axis  s   IbMM!!!R((!QQQ$!!!Q$$$MM!~~ 	 	D4  "AEEtdE$C$C   4  "AEEtdE$C$C   
 Ia$$R++MM! 	 	D4  "AEEtdE$C$C   4  "AEEtdE$C$C   
 HWMM! 	 	D4  "AEEtdE$C$C   4  "AEEtdE$C$C    G	r7 HWMM! 	8 	8D*ae$7777*ae$77777 	E 	EDrx//D1A1A1CDDDrx//D1A1A1CDDDDHWMM! 	8 	8D*ae$7777*ae$77777 	E 	EDrx//D1A1A1CDDDrx//D1A1A1CDDDD	E 	Er3   c                 D   t          g dg dg dg          }|                     |          }dD ]o}t          ||          }t          t          |d           t          t
          |d           t          t
          |d           t          t          |d	d	
           pd S )Nr  r  r  )rf   rQ   r   r  r  r  r   r  )r   r   r~   r   r   r  )r   r   r   fnamer   s        r1   test_minmax_invalid_paramsz&_TestMinMax.test_minmax_invalid_paramsY  s    YYYZZZZ! " " c""# 	; 	;E5%((D*d3333)T7777)T4444*d:::::	; 	;r3   c                 j   ddl m} t          g dg dg dg          }|                     |          }t	          ||j                  rjt          t          j        |          t          j        |                     t          t          j	        |          t          j	        |                     d S d S )Nr   )_datar  r  r  )
scipy.sparser  r   r   r@   _minmax_mixinr   rA   rf   rQ   )r   r  r   r   s       r1   test_numpy_minmaxz_TestMinMax.test_numpy_minmaxf  s     	'&&&&&YYYZZZZ! " " c"" eU011 	;rve}}bfSkk:::rve}}bfSkk:::::	; 	;r3   c           
         t          j        g dg dg dg dg dg          }|                                }||fD ]}t          |          }t	          |                                t          j        |                     t	          |                                t          j        |                     t	          |                    d          t          t          j        |d                               t	          |                    d          t          t          j        |d                               t	          |                    d          t          t          j        |d                              d	d                               t	          |                    d          t          t          j        |d                              d	d                               t          j	        d
          }t          j	        d          }dD ]O}| 
                    |          }t          t          |j        |           t          t          |j        |           PdD ]O}| 
                    |          }t          t          |j        |           t          t          |j        |           Pd S )N)r   r/  r]   r   )r   r   r   r   )r   r   rP  rC  rh  )r   r]   r   r   r   r  r   r   rn  r  rb   )Nr   )rA   r   r   r   r   argmaxargminr'   r  rp  r   r   r   )r   rp  D2r^  r   r  s         r1   test_argmaxz_TestMinMax.test_argmaxx  s   XMMNNLLLL
   \\^^b 	H 	HAQ--Cry||444ry||444++!")AA"6"6"6779 9 9++!")AA"6"6"6779 9 9 ++!")AA"6"6"6">">r1"E"EFFH H H++!")AA"6"6"6">">r1"E"EFFH H H H XfXf 	= 	=D--##C*cjt<<<<*cjt<<<<< 	= 	=D--##C*cjt<<<<*cjt<<<<<	= 	=r3   N)r   r   r   r|  r  r  r  r  rN   r3   r1   rw  rw    sd        -- -- --^?E ?E ?EB; ; ;; ; ;$%= %= %= %= %=r3   rw  c                       e Zd Zd ZdS )_TestGetNnzAxisc                    t          ddgddgddgg          }|                    t                    }|                     |          }t          j        t          j        f}t          |                    d           |	                    d                      t          |                                |	                                           t          |                    d          |	                    d                     t          |	                    d          j        |           t          |                    d          |	                    d                     t          |	                    d          j        |           t          |                    d	          |	                    d	                     t          |	                    d	          j        |           t          |                    d
          |	                    d
                     t          |	                    d
          j        |           t          t          |j	        d           d S )Nr   r]   r   r/  r  r|  r  r   r   r   )r   rl   r   r   rA   rR   r^   r   r  getnnzr2   r6   r   r   )r   r   bool_datr   accepted_return_dtypess        r1   test_getnnz_axisz _TestGetNnzAxis.test_getnnz_axis  s   aVV!W   ::d##c"""$(BH!58<<T<22ELLdL4K4KLLL8<<>>5<<>>:::8<<Q<//11E1EFFF%,,A,&&,.DEEE8<<Q<//11E1EFFF%,,A,&&,.DEEE8<<R<00%,,B,2G2GHHH%,,B,''-/EFFF8<<R<00%,,B,2G2GHHH%,,B,''-/EFFFj%,Q777777r3   N)r   r   r   r  rN   r3   r1   r  r    s#        8 8 8 8 8r3   r  Tc                     |r| S d }t          | j                  }| j                                        D ](\  }}|                    d          r ||          ||<   )t	          | j        dz   | 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                 F     t          j                    fd            }|S )Nc                      	  | i |S # t           t          t          t          t          f$ r t          j        d          w xY w)Nr  )rT  r  r   r  AttributeErrorr   r   )rE   r   fcs     r1   wrapperz6_possibly_unimplemented.<locals>.wrap.<locals>.wrapper  sY    A2q<B<<'+Y
"N4 A A A +&?@@@As	    8A)	functoolswraps)r  r  s   ` r1   wrapz%_possibly_unimplemented.<locals>.wrap  s=    _R  A A A A ! A Nr3   test_NotImplemented)dictr>   r3  
startswithr  r   	__bases__)r   requirer  new_dictr   r   s         r1   _possibly_unimplementedr    s    
  
		 		 		 %%,,,.. 	, 	,JD$w'' ,!%dCL#33M  	r3   c	                    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 ]V}|                    d          s|
                    |          }|"t#          d|j        d|d|j                  ||
|<   Wat'          d|	i           S )z
    Construct a base class, optionally converting some of the tests in
    the suite to check that the feature is not implemented.
    r  NzTest class z overloads test z defined in TestBase)r   r  r{  r  re  ra  r  r  r  r&  r;  rC  rw  r  r>   r  getr   r   r  )getsetslicingslicing_assignfancy_indexingfancy_assignfancy_multidim_indexingfancy_multidim_assignminmaxnnz_axisbasesnamesr   r   old_clss                 r1   sparse_test_classr    sW    $[&99#$\7;;$%7HH$%7HH$%=%13 3$%7%3%O8OQ Q$%=%:%K|M M$[&99$_h??AE$ E  L 	 	D??7++ iiooG" jLLL$$$(8(8": ; ; ;E$KK	 
E2&&&r3   c                       e Zd Zed             Zej        ej        ej        ej	        gZ
d Zd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZdS )r   c                     t                      5 }|                    t          d           t          |i |cd d d            S # 1 swxY w Y   d S )Nz<Changing the sparsity structure of a csr_matrix is expensive)r   r   r#   r   r   argsr9   r   s       r1   r   zTestCSR.spmatrix         	/CJJ.UW W Wt.v..	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/   'AA
Ac                    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   rR  r   r  r  r   )rR  r   r]   r  r  r   rV  )r   r   r   r[  r   rY  rZ  r   r  	getformatr   r   rJ   r  s      r1   test_constructor1zTestCSR.test_constructor1  s    9999999"$ $ mm!#(7773333;www///3:iii000SZZ\\!$$$S]]__U+++3;;==!,,,,,r3   c                    t          dd          }d|d<   t          |          }t          |j        dg           t	          |j        dg           t	          |j        g d           t          |                                |           d S )Nry  ry  r   r/  r  rR  )r   r   r   r   r   r   r   )r   r   r   r[  r   rY  rZ  r   r  s      r1   test_constructor2zTestCSR.test_constructor2  s    %#mm!#(A3///3;s+++3:ooo666!#++--33333r3   c                 $   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   r]   r   r   rw  r  r  )r   r   r   r[  r   rY  rZ  r   r  s      r1   test_constructor3zTestCSR.test_constructor3"  s    Aq6q6q6! ! mm!#(7773333;www///3:iii000!#++--33333r3   c                    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                  }t          dd
gd
d	ggt          j                  }t          ||                                           d S Nr]   r   r   r   r   r   r   r   r]   r   r]   r   r   r   r   r   r   r]   r]   r]   r]   r   g      @g      $@r  g      "@r  rA  g      &@r  g       @g      @r2  r  r  rR  r   l           r   r   r3  )	r   r	   r   r   r   r  r   rA   uint64)r   r]  r^  r[  r  rV  r  s          r1   test_constructor4zTestCSR.test_constructor4,  s   5556655566 3 3 3 4 4 SI$r5))6"::--a33S[[]]CCC 9a.Aq6Aq6*:;29MMM	1~1v.bi@@@5#++--00000r3   c                     t          g d          }t          g d          }t          g d          }t          |||f          }t          |j        d           d S Nr   r   r   r   r   r/  r   r]   rh  r  )r   r   r   r   r   rZ  rY  r[  rV  s        r1   test_constructor5zTestCSR.test_constructor5<  a    yyy!!			""YYY$01139U+++++r3   c                     g d}g d}g d}t          |||f          }t          |j        d           t          t	          j        |j        t          j                             d S r  )r   r   r   r   rA   rd   r6   signedintegerr  s        r1   test_constructor6zTestCSR.test_constructor6D  sh    ,,||$01139e,,,ci)9::;;;;;r3   c                    t          d          dz   }t          g dt          j                  }t          g dt          j                  }t	          |||fd          }t          g dg d	g d
gd          }t          |j        j        t          j        t          j                             t          |j	        j        t          j        t          j                             t          |                                |           d S )Nry  r   )r   r]   r   r   r   r]   r3  r   r]   rR  ry  r  r   r  r~  )r/  r   ry  r   )r   r   rA   r^   r   r   rZ  r6   rR   rY  r   r   )r   r[  r^  ptrrE   rJ   s         r1   test_constructor_smallcolz!TestCSR.test_constructor_smallcolM  s    ayy1}&&&bh777LLL111c3'v6669999999"$ $ 	QX^RXbh%7%7888QY_bhrx&8&8999199;;*****r3   c           	      H   t          d          dz   }t          j        t          j                  j        dz   }t          ddd||dz   |dz   gt          j                  }t          g dt          j                  }t          |||f          }t          |j	        j
        t          j
        t          j                             t          |j        j
        t          j
        t          j                             t          |j        dt	          |          dz   f           d S )	Nry  r   r  r   r]   r3  r  r   )r   rA   rP   rR   rQ   r   r^   r   r   rZ  r6   rY  r   r   )r   r[  larger^  r  rE   s         r1   test_constructor_largecolz!TestCSR.test_constructor_largecol]  s    ayy1}""&,Q1eU1WeAg6bhGGGLLL111c3'((QX^RXbh%7%7888QY_bhrx&8&899917QC
O44444r3   c                 v   t          d          }t          g d          }t          g d          }t          |||fd          }|                                }|                                 t          |j        g d           t          |                                |                                           d S )Nr/  rz  r]   r   r/  rR  r   r   r/  r]   rM   r  r   r]   rz  rR  r/  )r   r   r   r   r#  r   rY  r   r   r[  rY  rZ  r  r  s         r1   test_sort_indiceszTestCSR.test_sort_indicesj  s    ayy((yyy!!$0???hhjj3;7773;;==#++--88888r3   c                    t          g d          }t          g d          }t          g d          }t          |||fd          }|                                }|                                 t	          |j        d           t	          |j        g d           t	          |                                |                                           d S )Nr   r   r   r   r]   r   r   r   r   r]   r   rR  r/  ry  rz  r{  r   r   r{  r  r  r   rw  )r   r   r   eliminate_zerosr   r  r[  r   r  s         r1   test_eliminate_zeroszTestCSR.test_eliminate_zerost      ---..00011yyy!!$0???hhjj37A&&&38III...3;;==#++--88888r3   c           	      2   t          t          j        d                              dd          dz            }dD ]}t	          t          t           |          d            t          ||                      }t	          |j        |j                   t          |j	        |j	                   t          |j
        |j
                   t          |                                 t          t          |          |                                                     d S )Nr  rR  r/  r;  r?  r@  rA  rB  rC  rD  rE  rF  rG  r:  rH  rI  rJ  rK  rL  rM  rN  rO  T)r   rA   r   r  r   r"  r~   r   r   rY  rZ  r   r   r  r:  r>  s       r1   test_ufuncszTestCSR.test_ufuncs      ry}},,Q22S899J 	J 	JA Q//666AB"(+++qy"*555qx333rzz||^WR^^AIIKK-H-HIIII	J 	Jr3   c                    t          d          }t          g d          }t          g d          }t          |||fd          }t          d          }t          g d          }t          g d          }t          |||fd          }t          ||z                                   |                                |                                z              d S )	Nr/  r  r  r  r  ry  r{  r   r/  rz  r]   rR  r   r]   ry  )r   r   r   r   r   r  s         r1   test_unsorted_arithmeticz TestCSR.test_unsorted_arithmetic      ayy((yyy!!$0???ayy***++yyy!!$0???cCi((**CKKMMCKKMM,IJJJJJr3   c                    t          j        dgdgdgg          }t          j        g d          }t           j                            d           t	          t           j                            dd                    }|                     |          }|||f         }t          |          r|                                }t          ||||f                    d S Nr   r]   r   r=  rZ   r/  rz  
rA   r   r   r[   r'   r  r   r"   r   r   r   r  r  r^  r<  r  s         r1   test_fancy_indexing_broadcastz%TestCSR.test_fancy_indexing_broadcast      HqcA3_%%HYYY
	tRY^^Aq))**MM!!fc?? 	 ++--CS!AaC&!!!!!r3   c                 P   t          j        ddg          }t          j        ddg          }t          j        ddg          }t          j        ddg          }t          |||f                                          }t	          d|j                   t          |j                  t          k    sJ 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   r]   TFN)rA   r   r   r   r   r!  r  r   r#  r   rY  )r   sorted_indsunsorted_indsr[  rZ  r"  s         r1   test_has_sorted_indiceszTestCSR.test_has_sorted_indices  s~   h1v&&!Q((xA1a&!!k623388::T1/000A())T1111mV455::<<UA0111 	
T1/00019k222mV455::<<#T1/00019m444 	
19m44444r3   c                    t          t          j        dg          t          j        dg          t          j        ddg          f          }t          d|j                   t          j        ddg          }t          j        ddg          }t          j        ddg          }t          |||f                                          }t          d|j                   t          |j                  t          k    sJ |                                 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_duplicatesr]   r   r   TFN)r   rA   r   r   has_canonical_formatr   r  r   sum_duplicatesr   rY  )r   r"  rY  r[  rZ  s        r1   test_has_canonical_formatz!TestCSR.test_has_canonical_format  s    !rx}}bh1v6F6FGHHT11222(Aq6""xA1a&!!gv.//4466UA2333A*++t3333 	
T11222QAI'''gv.//4466!%T11222QAI''' 	
QAI'''''r3   c                    t          j        dt           j                  }t          j        dt           j                  }t          j        d          }t          |||fd          }t          |||fd          }t          j        dt           j                  }t          ||fd          }t          ||f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 ]}||z    d S )Nr]   r3  r   r   r  r           r  )rA   r   rR   r   r   rZ  r6   r^   r   rZ  rY  valsrE   rJ   r  r8  r   r9  r:  r7   s               r1   test_scalar_idx_dtypezTestCSR.test_scalar_idx_dtype      !28,,,(1BH---x{{gv.lCCCgv.jAAAXfBH---bz666bz444|$$z""QX^RX...QX^RX...QX^RX...QX^RX...QX^RX...QX^RX... Q1a# 	 	AEEE	 	r3   c                     t          g d          }t          g d          }||z   j        dk    sJ |                    |          j        dk    sJ d S )Nr  r   r   r   r]   r   )r   r  r  r   rE   rJ   s      r1   test_binop_explicit_zerosz!TestCSR.test_binop_explicit_zeros  sa     yyy!!yyy!!A{azz!}} A%%%%%%r3   N)r   r   r   ra  r   rA   r  ru  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  rN   r3   r1   r   r     sJ       / / [/
 8RWbi=K
- 
- 
-4 4 44 4 41 1 1 , , ,< < <+ + + 5 5 59 9 9	9 	9 	9
J 
J 
J	K 	K 	K" " "5 5 58( ( (:  0& & & & &r3   r   c                       e Zd Zed             Zej        ej        ej        ej	        gZ
d Zd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd ZdS )r   c                     t                      5 }|                    t          d           t          |i |cd d d            S # 1 swxY w Y   d S )Nz<Changing the sparsity structure of a csc_matrix is expensive)r   r   r#   r   r  s       r1   r   zTestCSC.spmatrix  r  r  c                    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   r  r   r]   r   r   r   )r   r]   r   r   )r   r]   r   r]   r  rR  rW  )r   r   r   r[  r   rY  rZ  r   r  r   r  r  s      r1   r  zTestCSC.test_constructor1
  s    <<<|||<cBBmm!#(9995553;yyy1113:kkk222SZZ\\!$$$SYqw'''S]]__U+++++r3   c                     t          dd          }d|d<   t          |          }t          |j        dg           t	          |j        dg           t	          |j        g d           d S )Nr  r   r/  )r]   rR  r]   )r   r   r   r   r   r   r   )r   r   r   r[  r   rY  rZ  r  s      r1   r  zTestCSC.test_constructor2  si    %#mm!#(A3///3;s+++3:ooo66666r3   c                     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   r]   r   r  )r   r   r   r[  r   rY  rZ  r  s      r1   r  zTestCSC.test_constructor3  sw    Aq6Aq6Aq6*C00mm!#(Aa51113;!u---3:ggg.....r3   c                 8   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  r  rR  r   )r   r	   r   r   r   r  r   )r   r]  r^  r[  r  rW  s         r1   r  zTestCSC.test_constructor4#  s    5556655566 3 3 3 4 4 SI$r5))6"::--a33S[[]]CCCCCr3   c                     t          g d          }t          g d          }t          g d          }t          |||f          }t          |j        d           d S Nr  r  rh  )ry  r   )r   r   r   r   r   rZ  rY  r[  rW  s        r1   r  zTestCSC.test_constructor5.  r  r3   c                     g d}g d}g d}t          |||f          }t          |j        d           t          t	          j        |j        t          j                             d S r  )r   r   r   r   rA   rd   r6   r  r  s        r1   r  zTestCSC.test_constructor66  sh    ,,||$01139U+++ci)9::;;;;;r3   c                    t          g d          }t          g d          }t          g d          }t          |||fd          }|                                }|                                 t	          |j        d           t	          |j        g d           t	          |                                |                                           d S )Nr  r  r  rM   r]   r  r   rw  )r   r   r   r  r   r  r[  r   r  s         r1   r  zTestCSC.test_eliminate_zeros?  r  r3   c                 \   t          d          }t          g d          }g d}t          |||fd          }|                                }|                                 t          |j        g d           t          |                                |                                           d S )Nr/  r  r  r  r  r  )r   r   r   r   r#  r   rY  r   )r   r[  r]  r  r  r  s         r1   r  zTestCSC.test_sort_indicesJ  s    ayyOOO$$ii$S)888hhjj3;7773;;==#++--88888r3   c           	      2   t          t          j        d                              dd          dz            }dD ]}t	          t          t          |          d            t          ||                      }t	          |j        |j                   t          |j
        |j
                   t          |j        |j                   t          |                                 t          t          |          |                                                     d S )N   rz  r   g      5@r  T)r   rA   r   r  r   r"  r   r~   r   r   rY  rZ  r   r  s       r1   r  zTestCSC.test_ufuncsT  r  r3   c                    t          d          }t          g d          }t          g d          }t          |||fd          }t          d          }t          g d          }t          g d          }t          |||fd          }t          ||z                                   |                                |                                z              d S )	Nr/  r  r  r  r  ry  r  r  )r   r   r   r   r   r  s         r1   r  z TestCSC.test_unsorted_arithmetic`  r  r3   c                    t          j        dgdgdgg          }t          j        g d          }t           j                            d           t	          t           j                            dd                    }|                     |          }|||f         }t          |          r|                                }t          ||||f                    d S r  r  r  s         r1   r  z%TestCSC.test_fancy_indexing_broadcastk  r  r3   c                    t          j        dt           j                  }t          j        dt           j                  }t          j        d          }t          |||fd          }t          |||fd          }t          j        dt           j                  }t          ||fd          }t          ||f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 ]}||z    d S )
Nr]   r3  r   )r  r   r  )r	  r   r  r  r  )	rA   r   rR   r   r   r   rZ  r6   r^   r
  s               r1   r  zTestCSC.test_scalar_idx_dtypey  r  r3   N)r   r   r   ra  r   rA   r  ru  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  rN   r3   r1   r   r     s       / / [/
 8RWbi=K, , ,7 7 7/ / /	D 	D 	D, , ,< < <	9 	9 	99 9 9
J 
J 
J	K 	K 	K" " "    r3   r   c                   ^    e Zd ZeZej        ej        ej        gZ	d Z
d Zd Zd Zd Zd ZdS )r   c                     t          d          }d|d<   d|d<   ||j        z  }||j        z  }t          |j        |j                   d S )NrM   rM   rM   r  r  r/  ry  )r   r  r  r   rH   )r   rH   r^  r  s       r1   	test_multzTestDOK.test_mult  sQ    w##acEacE13$$$$$r3   c                    |                      d          }d|d<   d|d<   |dz   }t          ddgddgddgg          }t          |                                |           |d	z   }|d	z   }t          |                                |           d S )
NrU  r  r  r  rM   r   r  r  )r   r   r   r   r  s      r1   test_add_nonzerozTestDOK.test_add_nonzero  s    MM%  ##FB7RHr2h/00199;;***FF199;;*****r3   c                 ,   |                      d          }d|d<   d|d<   t          |dz                                  |                                dz             t          |dz                                  |                                dz             d S )NrU  r,  r  r  r  r  r|  )r   r   r   rF  s     r1   test_dok_divide_scalarzTestDOK.test_dok_divide_scalar  s}    MM%  ##AbD>>++QYY[[^<<<AaC==??AIIKKM:::::r3   c                    d\  }}t          ||f          }d|d<   d|d<   d|d<   d|d	<   d
|d<   d|d<   t          |                                d d |dz
  f         t          |                     |                                }t          |                                d d |dz
  f         t          |                     ||}}|                                }t          |j        ||f           t          |                                |dz
  d d f         t          |                     |                                }t          |                                |dz
  d d f         t          |                     d S )N)ry  rz  r   r  r]   r  r   r  rR  r  r/  r  ry  r  )	r   r   r   r   r4  r   r   r   r5  )r   r;  r  rE   rW  rJ   rV  s          r1   test_convertzTestDOK.test_convert  sd   A1v ###### 	199;;qqq1u-uQyy999 ggii3;;==1Q3/q;;; QAKKMMQWq!f%%%199;;qs111u-uQyy999 ggii3;;==1QQQ/q;;;;;r3   c                    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	                  }t	          |j        t          j	                   |                                }t	          |j        t          j	                   t          ||           d S )Nr  r  r  r   r  r  r3  )r   r  r   r   r   r6   r   r   rA   r0  r   )r   rJ   rH   r8  r[  r   das          r1   	test_ctorzTestDOK.test_ctor  s   i,,, <<<|||<cBBqMMQWag&&&QYY[[!$$$ qMMQYY[[!))++...		999%t2:...QWbj)))YY[[RXrz***2t$$$$$r3   c                    t          d          }d|d<   t          d|                                vd           t          d          }d|d d df<   t          t          |                                          dk    d           d S )Nr  r   rl  zUnexpected entry (0,0) in keyszUnexpected entries in keys)r   r   keysr   r  s      r1   test_ticket1160zTestDOK.test_ticket1160  s    u# 	QVVXX%'GHHH u!!!A#AFFHH"$@AAAAAr3   N)r   r   r   r   r   rA   ru  r  r  r   r*  r-  r/  r1  r4  r7  rN   r3   r1   r   r     s        H7BIr{3K% % %
+ 
+ 
+; ; ;< < <>% % %*B B B B Br3   r   )r  r  c                   j    e Zd ZeZej        ej        ej        gZ	d Z
d Zd Zd Zd Zd Zd Zd Zd	S )
TestLILc                    t          dt          j                  }d|d<   d|d<   t          dt          j                  }d|d<   d|d<   t	          j                    dk    r2t          ||j        z  ||j        z                                             t          ||	                                j        z  ||j
        z                                             d S )Nr(  rM   r  y              4@r)  r3  ppc64le)r   rA   r2  r   platformmachiner   r  r   r   r  r  s      r1   test_dotzTestLIL.test_dot  s    (BM**$$xr}555$$ **q13wQS(9(9(;(;<<<1q{{}}.QS0A0A0C0CDDDDDr3   c                     t          d          }d|d<   |dz  }t          |d         d           |dz  }t          |d         d           d S )Nr  r]   rl  rR  r   )r   r   )r   r7   s     r1   test_scalar_mulzTestLIL.test_scalar_mul  sX    v$aCQtWa   aCQtWa     r3   c                    t          g dg dg          }t          g dg dg          }|||z   f|||z
  fd|dz  fd}|                                D ]l\  }\  }}|                                } t          |d|z            |           t	          |                                |                                           mt          dt          j        d          	          }t          g d
          }|dd d fxx         |z  cc<   t	          |dd d f                                         	                                |           d S )Nr   r]   r   r  r  r   )addsubmulz__i%s__r  r   r3  )皙?rF  rF  r   )
r   r3  r   r~   r   r   rA   r6   r   squeeze)r   rH   rI   r[  opotherr   r  s           r1   test_inplace_opszTestLIL.test_inplace_ops  s`   			999-..			999-..1q5z1q5z1q5z# # &*ZZ\\ 	E 	E!B!VVXXF+GFIN++E222v~~//1A1A1C1CDDDD vRXi%8%8999///""	!QQQ$11QT7??,,4466:::::r3   c                     g dg dg}t          t          |                    }t          |          D ]<\  }}t          |                                t          ||         d                     =d S )Nrw  rx  r]   )ndmin)r   r   r  r   r   )r   row_datarI   r  r]  s        r1   test_lil_iterationzTestLIL.test_lil_iteration+  sz    IIyyy)uX''ll 	K 	KFAss{{}}eHQKq.I.I.IJJJJ	K 	Kr3   c                     t          d          }d|d<   d|d<   d|d<   d|d	<   d
|d<   |                                }t          |          }t          |j        |j                   d S )Nr(  rM   r  r  r)  r  )r{  r   rk  )r   r{  r  )r{  r|  )r   r5  r   rH   )r   rI   r  r^  s       r1   test_lil_from_csrzTestLIL.test_lil_from_csr1  sp     x  $$$$$GGIIqMM13$$$$$r3   c                 ,   t          t          d                              dd                    }t          |          }t	          |t          g d          ddf                                         |t          g d          ddf                    d S )Nr  r/  rw  r]   r   )r'   r   r  r   r   r   r   )r   r"  rH   s      r1   test_fancy_indexing_lilzTestLIL.test_fancy_indexing_lil>  s    VBZZ''1--..qMMQuYYY''1,-5577uYYY''1,-	/ 	/ 	/ 	/ 	/r3   c                    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   rl  r]   r  r   rV  rR  r  r  rU  r1  rD  r   r   r|  )r   rg  r   )r   r   r  r   )r   lr;  s      r1   test_point_wise_multiplyz TestLIL.test_point_wise_multiplyE  s   v$$$$v$$$$$1::a==0022::a==0022	4 	4 	4 	1::a==0022%II%II%II&JJ(	) 	) 	) 	) 	)r3   c                 d    t          t          j        d                    }|dz  }d|dd d f<   d S )Nr  r  r   )r   rA   r  )r   rE   s     r1   test_lil_multiply_removalz!TestLIL.test_lil_multiply_removal\  s5    rwv''	R!QQQ$r3   N)r   r   r   r   r   rA   ru  r  r  r   r>  r@  rJ  rN  rP  rR  rV  rX  rN   r3   r1   r9  r9    s        H7BIr{3KE E E! ! !; ; ;(K K K% % %/ / /) ) ).    r3   r9  )r  c                       e Zd ZeZej        ej        ej        gZ	d Z
d Zd Zd Zd Zej                            dd          d	             Zd
 Zd Zd Zd Zd Zd ZdS )TestCOOc                    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                  }t          dd
gd
d	ggt          j                  }t          ||                                           d S r  )r   r   r   r   r  r   rA   r  )r   r]  r^  r[  r\  r  s         r1   r  zTestCOO.test_constructor1l  s    5556655566CCCDD$Cy)%006"::--a33S[[]]CCC 9a.Aq6Aq6*:;29MMM	1~1v.bi@@@5#++--00000r3   c                    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   r]   r]   r]   r]   r   r   r]   r]   )
r   r]   r   r]   r   r   r   r   r   r]   )
r]   r|  rC  r/  rz  r   r   r]   r   rA  r  )rR  r   r   rT  )rP  rz  r   )r   r   r   r   )r   r]  r^  r[  r\  r   s         r1   r  zTestCOO.test_constructor2z  s    )))**)))**---..$Cy)%00ZZZJJJ7883.....r3   c                 *   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\  s     r1   r  zTestCOO.test_constructor3  s{    39U+++372&&&372&&&38B'''3;;==%--88888r3   c                 h   t          g dg dg dg          }t          |          }t          |                                |           t          g d          }t          |          }t          |                                |                    dd                     t          j        t          d          5  t          g dg d	g d
f           d d d            n# 1 swxY w Y   t          j        t          d          5  t          g dd           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   )rz  r   r   r   )r   rR  r   r   r   r   zobject cannot be interpreted)match)r   r     !   r  r  zinconsistent shapesr  r  )	r   r   r   r   r  r   r   r  r   )r   r   r\  s      r1   r  zTestCOO.test_constructor4  s   YYYYYYY  ! ! oo3;;==#... IIIoo3;;==#++a*<*<=== ]9,KLLL 	F 	F|||(DEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F ]:-CDDD 	6 	6f5555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s$   ;C  C$'C$D''D+.D+c                     dg}t          |dgdgffd           }|j        t          j        |          j        k    sJ d S )Nr   r   r3  )r   r6   rA   r   )r   r[  r\  s      r1   "test_constructor_data_ij_dtypeNonez*TestCOO.test_constructor_data_ij_dtypeNone  sL    s$!qc
+4888yBHTNN0000000r3   FzCOO does not have a __getitem__runreasonc                     d S r5   rN   r   s    r1   r!  zTestCOO.test_iterator      r3   c                 |    ddgg}t          |                                          }t          |j        |           d S rb   )r   todiar   rH   )r   r   r_  s      r1   test_todia_all_zeroszTestCOO.test_todia_all_zeros  s>    Q%%''35%(((((r3   c                    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   r]   r   r   )r   r  r   rH   r]  r^  r[  r^  s     r1   test_sum_duplicateszTestCOO.test_sum_duplicates  s   1Q%1Q%!A01135Aa5!A-0001Q%1Q%!A01135Aa5!A-00037QC(((37QC(((38aS)))))r3   c                     t          g dg dg dff          }|                                }t          |j        |j                   d S )N)r   r   r   r   )r   r]   r]   r   )r   r   r   r   )r   r)  r   rH   )r   r\  r;   s      r1   test_todok_duplicateszTestCOO.test_todok_duplicates  sL    )))iii%;<==iikk35#%(((((r3   c                 n   t          g d          }t          g d          }t          g d          }t          |||ff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   rH   )r   r[  r]  r^  r  r  s         r1   r  zTestCOO.test_eliminate_zeros  s    ---..,,,--,,,--$c
+6:::hhjjQ##%%&&&35#%(((((r3   c                    g dg dg dg}d}t          |          }|                    |          }t          |j        |j        u            |                    |d          }t          |j        |j        u            |                    |d          }t          t	          j        |j        |j                              d S )Nr  r  r  r  Fr  T)r   r  r   r[  rA   rG   )r   rg   	new_shaper7   r8   s        r1   test_reshape_copyzTestCOO.test_reshape_copy  s    }}lllOOO<	sOOIIi  !& !!!IIieI,,!& !!!IIidI++B'77788888r3   c                 &   t          dgdgdgffd          }t          dgdgdgffd          }t          |                    dd          |k    j        dk               t          |                    dd	          |k    j        dk               d S )
Nr   i- r  )-   )ry  rx  r  r  r   r  )r   r   r  r  )r   mat1mat2s      r1   test_large_dimensions_reshapez%TestCOO.test_large_dimensions_reshape  s     A3'TF 34oFFA3$' 34oFF 	oS99TAF!KLLLoS99TAF!KLLLLLr3   N)r   r   r   r   r   rA   ru  r  r  r   r  r  r  r  re  r   rb  xfailr!  rm  ro  rq  r  rv  r|  rN   r3   r1   rZ  rZ  f  s
        H7BIr{3K1 1 1	/ 	/ 	/9 9 96 6 6*1 1 1
 [5)JKK  LK) ) )
* * *) ) )
) ) )9 9 9	M 	M 	M 	M 	Mr3   rZ  )r  r  r  r  r  c                       e Zd ZeZej        ej        ej        gZ	d Z
ej                            dd          d             Z ed          d             Zej                            d	          d
             Zd ZdS )TestDIAc                 &   t          g dg dg dg dg          }t          j         g dg                              dd          }t          j         g d	          }t          t	          ||fd
                                          |           d S )N)r   r   r   r   )r   r]   r   rR  )r   r]   r   r   )r   r   r   rR  rh  r   r   r  )r   r   r]   r  r  )r   rA   repeatr   r   r   )r   r^  r[  r`  s       r1   r  zTestDIA.test_constructor1  s    <<<<<<<<<! " " x$$++A1+55(888$$Zwv>>>FFHH!LLLLLr3   FzDIA does not have a __getitem__rf  c                     d S r5   rN   r   s    r1   r!  zTestDIA.test_iterator  rj  r3   r   c                    t          t          j        d                    }t          |j        j        t          j                   |                    dd           t          |j        j        t          j                   t          t          j        d                    }t          |j        j        t          j                   |                    dd           t          |j        j        t          j                   d S )Nr   )r   r]   ri  rR  )	r   rA   r!   r   r`  r6   rR   r  r^   r   r;  s     r1   test_setdiag_dtypezTestDIA.test_setdiag_dtype  s    rvayy!!QY_bh///			$!	QY_bh///rvayy!!QY_bh///			$!	QY_bh/////r3   zDIA stores extra zerosrh  c                     d S r5   rN   r   s    r1   r  zTestDIA.test_getnnz_axis
  rj  r3   c                 ,   t          g dgdgfd          }|                                }t          |                                                                |           t          |                                                                |           d S )Nr  r   r  r  )r   r   r   r4  r5  )r   r;  r   s      r1   test_convert_gh14555zTestDIA.test_convert_gh14555  s|    bT*&99999;;17799,,..99917799,,..99999r3   N)r   r   r   r   r   rA   ru  r  r  r   r  r   rb  r}  r!  r   r  r   r  r  rN   r3   r1   r  r    s         H7BIr{3KM M M [5)JKK  LK Q	0 	0  	0 [566  76: : : : :r3   r  )r  r  r  r  r  r  r  c                      e Zd ZeZej        ej        ej        gZ	d Z
d Zd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zej                            dd          d             Zej                            dd          d             Zd Zej                            dd          d             Zej                            ed          d             ZdS )r   c                 :   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          }t	          |                                |           t          |||f          }t	          |                                |           d S N)r   r]   r]   rR  )r   r]   r]   r   )rR  r]   r   r  r  r   rI  )ry  r   rM   r   )r   rR  r{  )r  r   r  r]   )r   r/  rM   )rm  r   r  r   r  r  r  ry  r  r  )r   r   r   r    r   r   )r   rZ  rY  r[  rH   r  s         r1   r  zTestBSR.test_constructor1   sY   yyy!!			""W~~"$ % %Q#% & &Q$& ' 'Q$& ' 'Q )))IIIiii07777772CDD$wv.V<<<S[[]]A&&& $wv.//S[[]]A&&&&&r3   c                 X   dD ]@}t          |          }t          t          |                                          |           At          d          }t          t          |d                                          |           t          t          |d                                          |           t	          g dg dg dgg d	g d
g          }t          t          |                                          |           t          t          |d                                          |           t          t          |d                                          |           t          t          |d                                          |           t          t          |d                                          |           t          t          |d                                          |           t          t          |d                                          |           t          t          |d                                          |           t	          g dg dg dgg d	g d
g          }t          t          |d                                          |           d S )N)r  r  r  )rM   rR  )r   rz  r  )rR  ry  rV  r  r  r  r  r  r  r  r  r  r  r  )r]   r  )r   r  r`  )r   r   r    r   r   )r   r   rH   s      r1   r  zTestBSR.test_constructor27  so    B 	5 	5EeAA..00!4444%LLZV444<<>>BBBZV444<<>>BBB)))IIIiii07777772CDDZ]]**,,a000Z11199;;Q???ZV444<<>>BBBZV444<<>>BBBZV444<<>>BBBZW555==??CCCZW555==??CCCZW555==??CCC)))IIIiii07777772CDDZV444<<>>BBBBBr3   c                     g dg dg dff}t          ddgddgg          }t          t          |d	                                          |           d S )
Nrw  r  rf  r   r   r]   r   rV  r  )r   r   r    r   )r   argrH   s      r1   r  zTestBSR.test_constructor3O  se    ww'''*+Aa5!A-  Zv666>>@@!DDDDDr3   c                    d}t          j        ||dft           j                  }t          j        d|gt           j                  }t          j        |t           j                  }t          |||f|dfd           d S )Nr{  r   r3  r   F)r  r   )rA   r  r   r   rR   r   r    )r   r  r[  rZ  rY  s        r1   r  zTestBSR.test_constructor4U  s{     w1ay0001a&111)ARX...D'6*q!f5IIIIIIr3   c                 2   d}t          j        |          }t          j        |||f          }t          j        d|g          }t          j        |          }t	          t
                    5  t          |||f           d d d            n# 1 swxY w Y   t	          t
                    5  t          |||fd           d d d            n# 1 swxY w Y   t	          t
                    5  t          |||fd           d d d            d S # 1 swxY w Y   d S )Nr{  r   r  r  r  )rA   r  r   r   r   r   r    )r   r  	data_1dimr[  rZ  rY  s         r1   r  zTestBSR.test_constructor5^  s   GAJJ	w1ay!!1a&!!)A,,:&& 	5 	5	7F3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 :&& 	E 	Egv.)DDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E :&& 	B 	Bgv.&AAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs6   ,BBB*CCC*DDDc                    dgdggdgdggg}t          j        ddgt           j                  }t          j        ddgt           j                  }t          |||fd          }|j        t          j        |          j        k    sJ d S )Nr   r   r]   r3  r  r  )rA   r   rR   r    r6   )r   r?   rZ  rY  rJ   s        r1   test_default_dtypezTestBSR.test_default_dtyper  s    3*sQCj)1a&111(Aq62220FCCCw"(6**0000000r3   c                    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          }|                                }|                                                                }t          |                                |           t          |                                |                                           d S r  )r   r   r   r    r5  r6  r   r   )r   rZ  rY  r[  rH   AbsrAcsrAcsr_via_coos           r1   test_bsr_tocsrzTestBSR.test_bsr_tocsrz  s|   |||$$%%Y"$ % %Q#% & &Q$& ' 'Q$& ' 'Q ,,,lll;))YYY') )4&1AAAzz||zz||))++T\\^^Q'''T\\^^\%9%9%;%;<<<<<r3   c                    t          g dddgddgg          j        }|                    ddd          }t          g d          }t          g d          }t	          |||fd          }|                                }|                                 t          |j        d	           t          |	                                |	                                           d S )
Nr  r   r   r]   r  r  )rR  r  r  r  )
r   r  r  r   r    r   r  r   r  r   r  s         r1   r  zTestBSR.test_eliminate_zeros  s    ,,,!uaUm<<>||Bq##00011yyy!!$0???hhjj37C(((3;;==#++--88888r3   c                 N   t           j                            d           t          t           j                            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          j        d                     |                                 t          |j        d           t          |j        j	        d	           t          |
                                t          j        d                     d S )
Nr   )r  r  r  r  g?B   )r  r]   r   r  rB  )rA   r   r[   r    r[  r  r   r  r   r   r   r   r  s     r1   test_eliminate_zeros_all_zeroz%TestBSR.test_eliminate_zeros_all_zero  sT   
	qry''11VDDD !"qv}	QUB16<444 !"qv}	QUA16<333199;;(:(:;;; 	
QUA16<333199;;(:(:;;;;;r3   c                    t          t          d                              dd          d          }t          |j        d                                       dd          }t	          ||z  |                                |z             d S )Nx   r{  rm  rR  r/  r  r   r   r    r   r  r   r   r   r  s      r1   test_bsr_matveczTestBSR.test_bsr_matvec  ss    vg..s3775III171:&&r!,,QqS!))++/*****r3   c                    t          t          d                              dd          d          }t          |j        d         dz                                dd          }t	          ||z  |                                |z             d S )	Nr  r{  rm  r  r  r   ry  r   r  r  s      r1   test_bsr_matvecszTestBSR.test_bsr_matvecs  sw    vg..s3775III171:a<  ((A..QqS!))++/*****r3   FzBSR does not have a __getitem__rf  c                     d S r5   rN   r   s    r1   r!  zTestBSR.test_iterator  rj  r3   zBSR does not have a __setitem__c                     d S r5   rN   r   s    r1   r  zTestBSR.test_setdiag  rj  r3   c                 T   t          j        g dg dg dg          }|                     |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 )NrR  rS  rT  r  r  rU  r   r   r]   r   rV  r  r  r  r  rW  r;  s      r1   test_resize_blockedzTestBSR.test_resize_blocked  sm   Hlll"ll"ll$ % % MM!vM..  D()))13!Q"#Q"#Q!) 	* 	* 	* 	
13!Q"#Q!) 	* 	* 	*	13!Q"#Q"#Q!) 	* 	* 	* 	
13!-!-!/ 	0 	0 	0 	j!(F33333r3   c                     d S r5   rN   r   s    r1   r  z"TestBSR.test_setdiag_comprehensive  rj  r3   zexceeds memory limitr  c                    t          j        dt           j                  }t          j        dt           j                  }t          j        d          }t          |||fd          }t          |||f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        d          }t          j        d	          }	t          |||fd          }
t          |	||fd          }t	          |
j        j        t           j                   t	          |j        j        t           j                   n# t          t          f$ r d}
d}Y nw xY w|||||
|fD ]}||z    d S )
Nr]   r3  r   r  r  r  r  )r   r   r  )r   r   r	  )
rA   r   rR   r    r   rZ  r6   r^   MemoryErrorr   )r   rZ  rY  r  rE   rJ   r8  r   vals2vals3r9  r:  r7   s                r1   r  zTestBSR.test_scalar_idx_dtype  s    !28,,,(1BH---x	""gv.lCCCgv.jAAA|$$z""QX^RX...QX^RX...QX^RX...QX^RX...
	H_--EH]++EE7F3<HHHAE7F3:FFFA2222222Z( 	 	 	AAAA	 Q1a# 	 	AEEE	 	s   ,BG GGN)r   r   r   r    r   rA   ru  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r   rb  r}  r!  r  r  r  skipifIS_COLABr  rN   r3   r1   r   r     s        H7BIr{3K' ' '.C C C0E E EJ J JB B B(1 1 1= = =.	9 	9 	9< < <.+ + +
+ + +
 [5)JKK  LK [5)JKK  LK4 4 4. [5)JKK  LK [)?@@  A@  r3   r   )r  r  r  r  r  r  c                    |                     dd          }t          j        | j        t          j                  s$t          j        | j        t          j                  r|| f|z   S | f|z   |fz   S | dk                                    }|                     dd          } | dddxx         dz  cc<   d| ddd<   |d         j        dk    rTt          d |D                       }d|d         z  f|dd         z   }d|d         z  dz   f|dd         z   }d| |<   d| |<   t          d |D                       }|| f|z   S | f|z   |dz  fz   S )	z-Duplicates entries to produce the same matrixrZ  Nr   r]   r  r   c              3   &   K   | ]}|d          V  dS r  rN   )r  ps     r1   	<genexpr>z&_same_sum_duplicate.<locals>.<genexpr>  s&      ,,QAaD,,,,,,r3   c              3   @   K   | ]}|                     d           V  dS )r]   N)r  )r  rY  s     r1   r  z&_same_sum_duplicate.<locals>.<genexpr>"  s.      77w""777777r3   )
poprA   rd   r6   r  unsignedintegerr  r  rc   r  )r[  indsr9   rZ  	zeros_pospospos1pos2s           r1   _same_sum_duplicater  	  s   ZZ$''F	}TZ** .	}TZ!344.>7T>!7T>VI--##%%I ;;qq;!!D1IIINIIIDAJ |1,,),,,,,#a&{SW$#a&
}s122w&T
T
77$77777D~w~w~!--r3   c                        e Zd Zd
 fd	Zej                            d          d             Zej                            d          d             Zej                            d          d	             Z	 xZ
S )_NonCanonicalMixinFc                    t                      j        } ||fi |}|j        dk                                    }|d         j        dk    }|r|d         j        dz  }t                      5 }	|	                    t          d           |                     ||d         |         |d         |                   }ddd           n# 1 swxY w Y   | 	                    ||          }
d|vr
|j
        |d<    ||
fi |}|j        t          j        t          j        fv rd}nd}t          |j        |j        |	           |r*t!          |j        dk                                               |S )
zcReplace D with a non-canonical equivalent: containing
        duplicate elements and explicit zerosr   r]   r  r   Nr   gh㈵>gHz>)rtol)superr   rH   r  rc   r   r   r#   _insert_explicit_zero_arg1_for_noncanonicalr   r6   rA   r0  r1  r   r   r[  any)r   r^  sorted_indicesr9   	constructr"  zero_pos	has_zerosrj  r   arg1NCr  r  s                r1   r   z_NonCanonicalMixin.spmatrix+  s    GG$	Ia""6""C1H%%''a[%)	 	R !#A"$$ R

2\^ ^ ^..q(1+a.(1+a.QQR R R R R R R R R R R R R R R
 **1n==&  gF7OYt&&v&& 8
BL111
 DDDac----  	*RW\&&(())) 	s   ,ACC
Cz"bool(matrix) counts explicit zerosr  c                     d S r5   rN   r   s    r1   r   z_NonCanonicalMixin.test_boolQ  rj  r3   z!getnnz-axis counts explicit zerosc                     d S r5   rN   r   s    r1   r  z#_NonCanonicalMixin.test_getnnz_axisU  rj  r3   znnz counts explicit zerosc                     d S r5   rN   r   s    r1   r  z_NonCanonicalMixin.test_emptyY  rj  r3   F)r   r   r   r   r   rb  r   r   r  r  __classcell__)r  s   @r1   r  r  *  s        $ $ $ $ $ $L [ABB  CB [@AA  BA [899  :9    r3   r  c                       e Zd ZddZd ZdS )_NonCanonicalCompressedMixinFc                 >   t          |j        |j        |j                  \  }}}|srt	          ||dd                   D ]Y\  }}|||         ddd                                         |||<   |||         ddd                                         |||<   Z|||fS )5Return non-canonical constructor arg1 equivalent to M)rZ  r   Nr   )r  r[  rY  rZ  r   r   )r   r"  r  r[  rY  rZ  startstops           r1   r  z3_NonCanonicalCompressedMixin._arg1_for_noncanonical_  s     3AFAI;<8!E !E !Egv 	A"66!"":66 A At&-eDj&9$$B$&?&D&D&F&Fd
##'d
#3DDbD#9#>#>#@#@U4Z  Wf$$r3   c                     d|||f<   |S rb   rN   r   r"  r  r  s       r1   r  z2_NonCanonicalCompressedMixin._insert_explicit_zeroi  s    !A#r3   Nr  )r   r   r   r  r  rN   r3   r1   r  r  ^  s7        % % % %    r3   r  c                       e Zd Zd Zd Zej                            dd          d             Zej                            dd          d             Z	d	S )
_NonCanonicalCSMixinc                 l      fd}t           D ]%}dD ] } |t          j        |          |           !&d S )Nc                 b   t          g dg dg dg dg|           }	                    ||          }|j        \  }}t          | |          D ]6}t          | |          D ]"}t	          |||f         |||f                    #7dD ]$}t          t          t          f|j        |           %d S )Nr1  r~  r  rD  r3  )r  r  )	r   r   r   r   r   r   r  r  r  )
r6   r  r^  rH   r"  r%  r  r  r  r   s
            r1   r   z3_NonCanonicalCSMixin.test_getelement.<locals>.checkp  s    wwwwwwwww  (-. . .A a??A'CAaA2q\\ 1 1r1 1 1A 1Q31Q300001 C J Jz95q}bIIIIJ Jr3   )FTr  )r   r   r6   r  s   `   r1   r  z$_NonCanonicalCSMixin.test_getelemento  sm    	J 	J 	J 	J 	J  & 	7 	7E"/ 7 7bhuoo~66667	7 	7r3   c                    t          j        d          }|                     |          }|                     g dg          }|                                |dd d f<   t	                      5 }|                    t          d           ||dd d f<   d d d            n# 1 swxY w Y   t          |                                |           |                                                                |d d df<   t	                      5 }|                    t          d           |j	        |d d df<   d d d            n# 1 swxY w Y   t          |                                |           d S )Nr   rw  r   r  r]   )
rA   r!   r   r   r   r   r#   r   r  r  )r   r^  rH   rI   r   s        r1   test_setitem_sparsez(_NonCanonicalCSMixin.test_setitem_sparse  s   F1IIMM!MM777)$$!AAA#   	CJJ.XZ Z ZAacF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	199;;***""$$!!!A#   	CJJ.XZ Z ZSAaaacF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	199;;*****s$   +%BB #B *D::D>D>Fz(inverse broken with non-canonical matrixrf  c                     d S r5   rN   r   s    r1   r.  z_NonCanonicalCSMixin.test_inv  rj  r3   z&solve broken with non-canonical matrixc                     d S r5   rN   r   s    r1   r  z_NonCanonicalCSMixin.test_solve  rj  r3   N)
r   r   r   r  r  r   rb  r}  r.  r  rN   r3   r1   r  r  n  s        7 7 7*+ + +& [5)STT  UT [5)QRR  SR  r3   r  c                       e Zd ZdS )TestCSRNonCanonicalNr   r   r   rN   r3   r1   r  r            Dr3   r  c                       e Zd ZdS )TestCSCNonCanonicalNr  rN   r3   r1   r  r    r  r3   r  c                       e Zd Zd Zej                            dd          d             Zej                            dd          d             ZdS )	TestBSRNonCanonicalc                 n    |                                 }d|||f<   |                    |j                  S )Nr   r  )r5  r*  r  )r   r"  r  r  r7   s        r1   r  z)TestBSRNonCanonical._insert_explicit_zero  s2    GGII!A#www---r3   Fz&diagonal broken with non-canonical BSRrf  c                     d S r5   rN   r   s    r1   ru  z!TestBSRNonCanonical.test_diagonal  rj  r3   z"expm broken with non-canonical BSRc                     d S r5   rN   r   s    r1   r*  zTestBSRNonCanonical.test_expm  rj  r3   N)	r   r   r   r  r   rb  r}  ru  r*  rN   r3   r1   r  r    s        . . .
 [5)QRR  SR [5)MNN  ON  r3   r  c                   "    e Zd ZddZd Zd ZdS )TestCOONonCanonicalNc                 V    t          |j        |j        |j                  \  }}}|||ffS )r  )r  r[  r]  r^  )r   r"  r  r[  r]  r^  s         r1   r  z*TestCOONonCanonical._arg1_for_noncanonical  s.    ,QVQUAEBBc3c3Zr3   c                 h   t           j        |j        j                            d          |j        f         |_        t           j        |j        j                            |          |j        f         |_        t           j        |j        j                            |          |j        f         |_        |S rb   )rA   r_r[  r6   r  r]  r^  r  s       r1   r  z)TestCOONonCanonical._insert_explicit_zero  s|    qv|((++QV34aek&&q))1501aek&&q))1501r3   c                 N   |                      t          j        d                    }|                                 |                    ddgd           |                                 t          t          j        t          j        |j                  dk                         d S )Nr   r]   r   ri  r   )	r   rA   r!   r  r  r   rs  diffr^  r  s     r1   test_setdiag_noncanonicalz-TestCOONonCanonical.test_setdiag_noncanonical  s    MM"&))$$				1a&A		rwqu~~*++,,,,,r3   r5   )r   r   r   r  r  r  rN   r3   r1   r  r    sF               
  - - - - -r3   r  c               #     K   t           t          t          t          t          t
          t          g} dddddddd}| D ]P}t          t          |                    D ]/}t          ||          }|
                    d          rt          |d	d
          sg }|                    |          }t          |          r$|t          j                            |          gz  }t!          j        t          j                  t!          j        d          k    r5t          |dg           }|D ] }|j        dv r|                    |           !n)dD ]&}	t-          ||	          r|t          ||	          gz  }'t          j        |||          V  1Rd S )Nz%expm for 64-bit indices not availablez)linsolve for 64-bit indices not availableztest implemented in base classz%test actually requires 64-bit to workztest verifies int32 indexesztest verifies int64 indexes)r*  r.  r  r  r|  r  r  r  rc  Fr  z3.6.0
pytestmark)r  r   r}  xslow)marks)r   rZ  r   r   r  r   r9  sorteddirr~   r  r  r   r   rb  r   r   parse__version__Versionr   rC   r"  param)
TEST_CLASSES
SKIP_TESTSr   method_namemethodr  r.   markersrb  mnames
             r1   cases_64bitr    s     WgwWL =?A!A)P%B%B J  B B!#c((++ 	B 	BKS+..F&&w// B66B nn[1199 <fk..c.::;;E=!3448P8PPP%flB??G ' / /9(LLL!LL.../ "F > >"6511 >!gfe&<&<%==El35AAAAAA)	BB Br3   c                      e Zd ZeeeeegZd Z	d Z
d Zd Zd Zej                            d e                      d             Zej                            d e                      d             Zej                            d e                      d	             Zej                            d e                      d
             Zej                            d e                      d             Zd ZdS )	Test64Bitc                 T     |t           j                            ||                    S r5   )rA   r   r  )r   mat_clsr;  r  s       r1   _create_some_matrixzTest64Bit._create_some_matrix  s"    wry~~a++,,,r3   c                    t          j        |          }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                    r|j        j        |k    S t          d|d          )Nzmatrix z has no integer indices)rA   r6   r@   r   r   r    rY  rZ  r   r]  r^  r   r`  r   )r   r;  r6   s      r1   _compare_index_dtypezTest64Bit._compare_index_dtype  s    a*j*=>> 	HIOu,K18>U3JK:&& 	HEK5(Dqu{e/CD:&& 	HIOu,-*111FGGGr3   c                 h     t          d           fd            } j        D ]} ||           d S )NrM   ri   c                 `    | t           j                            dd                    }t                              |t           j                              | t           j                            dd                    }t                              |t           j                             d S )NrM   r   r  )rA   r   r  r   r  rR   r^   )r  r;  r   s     r1   r   z4Test64Bit.test_decorator_maxval_limit.<locals>.check  s    	r1--..AD--a::;;;	r1--..AD--a::;;;;;r3   r   MAT_CLASSESr   r   r  s   `  r1   test_decorator_maxval_limitz%Test64Bit.test_decorator_maxval_limit  sa     
!b	1	1	1	< 	< 	< 	< 
2	1	< ' 	 	GE'NNNN	 	r3   c                 h     t          d           fd            } j        D ]} ||           d S )NTr   c                    d}d}t          d          D ]d}                    | dd          }|p                    |t          j                  }|p                    |t          j                  }|r|r d S et          d          )NFr  r|  z#both 32 and 64 bit indices not seen)r   r	  r  rA   rR   r^   rk   )r  seen_32seen_64rj  r;  r   s        r1   r   z5Test64Bit.test_decorator_maxval_random.<locals>.check  s    GG3ZZ L L,,Wa;;!KT%>%>q"(%K%K!KT%>%>q"(%K%K w EE$%JKKKr3   r  r  s   `  r1   test_decorator_maxval_randomz&Test64Bit.test_decorator_maxval_random  sf     
!	-	-	-
	L 
	L 
	L 
	L 
.	-
	L ' 	 	GE'NNNN	 	r3   c                 H    t          di |d             } |||           d S )Nc                 4    |             }t          |d          r|                                 	  t          ||                       t          |d          r|                                 d S d S # t          |d          r|                                 w w xY w)Nsetup_methodteardown_method)r"  r  r~   r  )r   r   instances      r1   r   z*Test64Bit._check_resiliency.<locals>.check)  s    suuHx00 (%%'''/.+..0008%677 /,,...../ /78%677 /,,..../s   A0 0'BrN   )r   )r   r   r   r   r   s        r1   _check_resiliencyzTest64Bit._check_resiliency%  sF     
!	&	&2	&	&	/ 	/ 
'	&	/ 	c;r3   zcls,method_namec                 6    |                      ||d           d S )NrM   r  r  r   r   r   s      r1   test_resiliency_limit_10z"Test64Bit.test_resiliency_limit_106  s#    sKbAAAAAr3   c                 6    |                      ||d           d S )NTr  r   r!  s      r1   test_resiliency_randomz Test64Bit.test_resiliency_random:  s%    
 	sK=====r3   c                 J    |                      ||t          j                   d S NrY   )r  rA   rR   r!  s      r1   test_resiliency_all_32z Test64Bit.test_resiliency_all_32A  %    sKRXFFFFFr3   c                 J    |                      ||t          j                   d S r&  )r  rA   r^   r!  s      r1   test_resiliency_all_64z Test64Bit.test_resiliency_all_64E  r)  r3   c                 6    |                      ||d           d S )NT)r   r   r!  s      r1   
test_no_64zTest64Bit.test_no_64I  s#    sKdCCCCCr3   c                     t          t          j        d          d             }t          t          j                  d             } |              |             d S )Nr   )rY   rn   c                  j   t          ddgddgddgg          } t          t          | j        d           t          t          | j        d           t          g d	g d
g          } t          t          | j        d           t          g d	g dg          } t          t          | j        d           d S Nr   r]   r   rR  r/  ry  r  r   rw  )r   rR  ry  r  )r   r   rk   r  r  r   r   r   s    r1   check_limitedz3Test64Bit.test_downcast_intp.<locals>.check_limitedT  s     QFQFQF344A.!(;;;;.!%a8888IIIyyy122A.!(;;;;IIIyyy122A.!(;;;;;;r3   r'  c                  :   t          ddgddgddgg          } |                     d           |                     d           t          g d	g d
g          } |                     d           t	          g d	g dg          } |                     d           d S r0  )r   r  r  r   r   r   s    r1   check_unlimitedz5Test64Bit.test_downcast_intp.<locals>.check_unlimitedb  s     QFQFQF344AHH!HEEqEMMMIIIyyy122AHH!HIIIyyy122AHH!Hr3   )r   rA   r^   )r   r1  r3  s      r1   test_downcast_intpzTest64Bit.test_downcast_intpM  s     
!RX12
4 
4 
4
	< 
	<
4 
4
	< 
!RX	6	6	6
	 
	 
7	6
	 	r3   N)r   r   r   r    r   r   r   r   r  r	  r  r  r  r  r   rb  parametrizer  r"  r$  r(  r+  r-  r4  rN   r3   r1   r  r    s       z:z:NK- - -	H 	H 	H    &     " [.>>B B ?>B [.>>> > ?>> [.>>G G ?>G [.>>G G ?>G [.>>D D ?>D# # # # #r3   r  r5   )NFNNF)T)	TTTTTTTTT)or`  
contextlibr  r  r<  r  sys
scipy._libr   numpyrA   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.linalgrr   r  rs   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,   r   r  r2   r:   	frozensetr\  rK   r   r   r   r   r   r   r   re  r{  r  r  r  r  contextmanagerr$  r&  r;  rC  ra  rw  r  r  r  r   r   r   r   r9  rZ  r  r   r  r  r  r  r  r  r  r  r  r  rN   r3   r1   <module>rA     s
                  



          ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) + + + + + + + + + + + + + + + + + + + * * * * *          2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2F F F F F F F F F F F F F F / / / / / / / / / / * * * * * *  ck)o o o o' ' '
 %9eW--   (  !!   > " " " JN?DN N N Nb  $ $ $ $ $ $ $ $6"$ "$ "$ "$ "$ "$ "$ "$X7 7 7 7 7 7 7 7D:_; _; _; _; _; _; _; _;Dg+ g+ g+ g+ g+ g+ g+ g+T# # # # # # # #.\8 \8 \8 \8 \8 \8 \8 \8~TK TK TK TK TK TK TK TKnq0 q0 q0 q0 q0 q0 q0 q0h B B Bn$ n$ n$ n$ n$ n$ n$ n$b L  L  L  L  L  L  L  LF`K `K `K `K `K `K `K `KF^0 ^0 ^0 ^0 ^0 ^0 ^0 ^0Bu= u= u= u= u= u= u= u=p8 8 8 8 8 8 8 88   8 AE8<JN,0%' %' %' %'Xw& w& w& w& w&!! w& w& w&t      N N N N N!! N N Nb      _B _B _B _B _Buu=== _B _B _BD      f f f f fu--- f f fR      M M M M Mu(-e/45J J J M M MD      (: (: (: (: (:ueE/45',u> > > (: (: (:V      f f f f fu(-e/45).0 0 0 f f fR      . . .B1 1 1 1 1 1 1 1h    #5    / / / / /7 / / /d	 	 	 	 	. 	 	 		 	 	 	 	. 	 	 	    6   - - - - -,g - - -(&B &B &BR| | | | | | | | | |r3   