
    S_f'                       d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	Z
ddl	mZmZmZmZmZmZmZmZmZmZmZmZmZ ddlZddlmZmZmZmZmZmZm Z  ddl!m"Z# ddl$Z%ddl&m'Z' ddl&m(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8 dd	l9m:Z:m;Z;m<Z< dd
l=m>Z> ddl?m@Z@ ddl!Z!dej                  v ZBd\dZCd ZD eEdg      ZFd ZG e        ZHeHj                  e@       	 	 d]dZJd 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!      ZR G d" d#      ZS G d$ d%      ZT G d& d'      ZUej                  d(        ZW G d) d*      ZX G d+ d,      ZY G d- d.      ZZ G d/ d0      Z[ G d1 d2      Z\ G d3 d4      Z]d^d5Z^	 	 	 	 d_d6Z_ G d7 d8 e_             Z`e`j                           G d9 d: e_             Zbebj                           G d; d< e_dd=            Zcecj                           G d> d? e_d@            Zdedj                           G dA dB e_dddddC            Zeeej                           G dD dE e_dddddddF            Zfefj                           G dG dH e_ddddddI            Zgegj                          dJ Zh G dK dL      Zi G dM dNei      Zj G dO dPej      Zk G dQ dReke`      Zl G dS dTekeb      Zm G dU dVejeg      Zn G dW dXeiee      ZodY Zp G dZ d[      Zqy)`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)assert_equalassert_array_equalassert_array_almost_equalassert_almost_equalassert_assert_allclosesuppress_warnings)raises)
csc_matrix
csr_matrix
dok_matrix
coo_matrix
lil_matrix
dia_matrix
bsr_matrixeyeissparseSparseEfficiencyWarningsparray)supported_dtypesisscalarlikeget_index_dtypeasmatrixmatrix)spluexpminv)	decorator)ComplexWarningzgoogle.colabc                 8    ||n| d|}t        | |v |       y )Nz not found in )msg)r   )member
collectionr/   messages       <lib/python3.12/site-packages/scipy/sparse/tests/test_base.py	assert_inr4   2   s'    _cVJnZN*SGFj g.    c                 b    t        | j                  |j                  k(         t        | |fi | y N)r   dtyper   )xykwargss      r3   assert_array_equal_dtyper<   7   s&    AGGqwwq!&v&r5   dokc                 p    d } ||       D ](  } ||      D ]  }t        j                  ||      s  y * y)Nc                     g }| j                   j                         D ]>  }t        |t        j                  t        j
                  f      s.|j                  |       @ |S r7   )__dict__values
isinstancenpr
   genericappend)r9   arraysas      r3   _underlying_arraysz3sparse_may_share_memory.<locals>._underlying_arraysA   sO     ""$ 	!A!bjj"**56a 	! r5   TF)rC   may_share_memory)ABrH   rG   bs        r3   sparse_may_share_memoryrM   >   sI      " #A& 	A""1a(	 r5   Fc                      t        j                  d       nt        j                          |rd
dn8d
fd	n/|r't         j                  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.

    
   c                 *   t        | ||      }t        t        j                  |      j                  t        j                  t        j
                        j                         t        |t        j
                  k(  xs |t        j                  k(         |S r7   )r&   r   rC   iinfomaxint32r   intc)rF   maxvalcheck_contentstps       r3   new_get_index_dtypez4with_64bit_maxval_limit.<locals>.new_get_index_dtypee   s]     @B"))288BHH+=+A+ABB"((N3bBGGm4Ir5   c                     S r7    )rF   rU   rV   fixed_dtypes      r3   rX   z4with_64bit_maxval_limit.<locals>.new_get_index_dtypek   s	    r5     )seedc                 h    t         j                  t         j                  fj                  d         S )N   )rC   rS   int64randint)rF   rU   rV   counters      r3   rX   z4with_64bit_maxval_limit.<locals>.new_get_index_dtypep   s$    HHbhh'(:;;r5   c                    t         j                  }||kD  rt         j                  }| D ]  }t        j                  |      }|j                  t         j                  kD  s6|rj|j
                  dk(  rHt        j                  |j                  t         j                        r,|j                         }|j                         }| k\  r|k  rt         j                  } |S Nr   )
rC   rS   r`   r   r8   size
issubdtypeintegerrR   min)rF   rU   rV   r8   arrminvalmaxval_limits         r3   rX   z4with_64bit_maxval_limit.<locals>.new_get_index_dtypes   s    HHE!L(HHE %jjo99rxx'%88q=$]]399bjjA%(WWYF%(WWYF%,66\;Q (HHE% Lr5   c                 ~    | j                         kD  rt        d      | j                  t        j                        S )Nzdowncast limited)rR   AssertionErrorastyperC   intp)ri   downcast_maxvals    r3   new_downcast_intp_indexz8with_64bit_maxval_limit.<locals>.new_downcast_intp_index   s0    wwy?*$%788::bgg&&r5   c           
      L   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 ]]  }|j                  |dt        |dd       f       t        |d
       2|j                  |dt        |dd       f       t        |d	       _  | |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
_constructrE   getattrsetattr)funcrG   kwbackupmodulesmodnameoldfuncrp   rq   rX   s           r3   decoz%with_64bit_maxval_limit.<locals>.deco   sl   <<$$ell&7&79J9J<<$$ell&7&79J9J<<$$ell&;&;<<++U\\-D-DF	0 Qs$5&s,=tDF G.0CD".MM3(=#*30Et#L#N OC!68OPQ >b>&, 0"T7&Cw/0f 0"T7&Cw/0s   3F 55F F#F#)rZ   NF)rC   r`   randomRandomStater,   )	rk   r   r[   rp   assert_32bitr   rb   rq   rX   s	   ` ``  @@@r3   with_64bit_maxval_limitr   V   s     xx| xx-	
 
	 		))''T'2	<	* "	'
 0 0* Kr5   c                 p    t        | t        j                        st        |       r| S | j	                         S r7   )rB   rC   r
   r%   toarrayrG   s    r3   r   r      s'    !RZZ LO99;r5   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
BinopTesterc                      yNmatrix on the rightrZ   selfmats     r3   __add__zBinopTester.__add__       $r5   c                      yr   rZ   r   s     r3   __mul__zBinopTester.__mul__   r   r5   c                      yr   rZ   r   s     r3   __sub__zBinopTester.__sub__   r   r5   c                      yNmatrix on the leftrZ   r   s     r3   __radd__zBinopTester.__radd__       #r5   c                      yr   rZ   r   s     r3   __rmul__zBinopTester.__rmul__   r   r5   c                      yr   rZ   r   s     r3   __rsub__zBinopTester.__rsub__   r   r5   c                      yr   rZ   r   s     r3   
__matmul__zBinopTester.__matmul__   r   r5   c                      yr   rZ   r   s     r3   __rmatmul__zBinopTester.__rmatmul__   r   r5   N)__name__
__module____qualname__r   r   r   r   r   r   r   r   rZ   r5   r3   r   r      s*    %%%$$$%$r5   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y)BinopTester_with_shapec                     || _         y r7   _shape)r   shapes     r3   __init__zBinopTester_with_shape.__init__   s	    r5   c                     | j                   S r7   r   r   s    r3   r   zBinopTester_with_shape.shape   s    {{r5   c                 ,    t        | j                        S r7   )lenr   r   s    r3   ndimzBinopTester_with_shape.ndim   s    4;;r5   c                      yr   rZ   r   s     r3   r   zBinopTester_with_shape.__add__   r   r5   c                      yr   rZ   r   s     r3   r   zBinopTester_with_shape.__mul__   r   r5   c                      yr   rZ   r   s     r3   r   zBinopTester_with_shape.__sub__   r   r5   c                      yr   rZ   r   s     r3   r   zBinopTester_with_shape.__radd__   r   r5   c                      yr   rZ   r   s     r3   r   zBinopTester_with_shape.__rmul__   r   r5   c                      yr   rZ   r   s     r3   r   zBinopTester_with_shape.__rsub__   r   r5   c                      yr   rZ   r   s     r3   r   z!BinopTester_with_shape.__matmul__   r   r5   c                      yr   rZ   r   s     r3   r   z"BinopTester_with_shape.__rmatmul__   r   r5   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   rZ   r5   r3   r   r      s9     %%%$$$%$r5   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)ComparisonTesterc                      y)NeqrZ   r   others     r3   __eq__zComparisonTester.__eq__       r5   c                      y)NnerZ   r   s     r3   __ne__zComparisonTester.__ne__   r   r5   c                      y)NltrZ   r   s     r3   __lt__zComparisonTester.__lt__   r   r5   c                      y)NlerZ   r   s     r3   __le__zComparisonTester.__le__   r   r5   c                      y)NgtrZ   r   s     r3   __gt__zComparisonTester.__gt__   r   r5   c                      y)NgerZ   r   s     r3   __ge__zComparisonTester.__ge__   r   r5   N)	r   r   r   r   r   r   r   r   r   rZ   r5   r3   r   r      s     r5   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@                  jB                  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;e4d3        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_dW Z`dX ZadY ZbdZ Zcy[)\_TestCommonz6test common functionality shared by all sparse formatsc                    t        g dg dg dgd      | _        | j                  | j                        | _        t	        t
              j                  | j                        | _        i | _	        i | _
        | j                  D ]a  }| j                  j                  |      | j                  |<   | j                  | j                  j                  |            | j                  |<   c t        | j                  | j                  t        j                            t        | j                  j                         | j                  t        j                     j                                y )N)   r   r   r_   )   r   r   r   )r   r_   r   r   d)r   dat	spcreatordatspsetr$   unionmath_dtypeschecked_dtypes
dat_dtypesdatsp_dtypesrn   r   rC   float64r   )clsr8   s     r3   
init_classz_TestCommon.init_class  s    |\BCHMM#''*	
 !!1288I'' 	KE$'GGNN5$9CNN5!&)mmCGGNN54I&JCU#	K 	SWWcnnRZZ89SYY&&(%%bjj199;	=r5   c                       fd}t         t              rt        j                  d        j                  D ]
  } ||        y )Nc                     j                   |    }t        t        t        |       t	        j                  dgg             t	        j                  dgg              y )Nr   r   )r   assert_raises
ValueErrorboolr   r   )r8   r   r   s     r3   checkz$_TestCommon.test_bool.<locals>.check#  sL    %%e,E*dE2DNNQC5)*u--.r5   z%Cannot create a rank <= 2 DOK matrix.)rB   TestDOKpytestskipr   r   r   r8   s   `  r3   	test_boolz_TestCommon.test_bool"  s=    	/ dG$KK?@(( 	E%L	r5   c                     t        ddgg      }| j                  |      }t        d      D ]  }||z   }||z   } t        ||j	                                y )NTFrO   )r   r   ranger   r   )r   r   r   _s       r3   test_bool_rolloverz_TestCommon.test_bool_rollover/  sY     dE]O$s#r 	AEME)C	 	30r5   c                      t               }|j                  t               |t         fd              }t	         t
        t        t        f      st        j                  d        j                  D ]
  } ||        y )Nc                 J   	j                   |    }	j                  |    }|j                         }d|d d df<   	j                  |      }t	        |      }t        |      }t        |      }t        |      }t        ||k(  ||k(  j                                t        ||k(  ||k(  j                                t        ||k(  ||k(  j                                t        ||k(  ||k(  j                                t        ||k(  ||k(  j                                t        ||k(  ||k(         t        |dk(  |dk(  j                                t        |dk(  |dk(  j                                t        |t        j                  k(  |t        j                  k(  j                                y Nr   r   )r   r   copyr   r   r   r   r   r<   r   rC   nan)
r8   r   r   dat2datsp2datbsrdatcsrdatcscdatlilr   s
            r3   r   z"_TestCommon.test_eq.<locals>.check>  si    //%(C%%e,E88:DD1I^^D)F_F_F_F_F %SD[5F?2K2K2MN$SD[6V3C2L2L2NO$SD[6V3C2L2L2NO$SD[6V3C2L2L2NO$SD[6V3C2L2L2NO$SF]FcMB$SAX
/C/C/EF$SAX
/C/C/EF$SBFF]&+rvvo%>%>%@Br5   8Bool comparisons only implemented for BSR, CSC, and CSR.r   filterr"   sup_complexrB   TestBSRTestCSCTestCSRr   r   r   r   supr   r8   s   `   r3   test_eqz_TestCommon.test_eq:  sp    !

*+			B 
 
	B4 $'7 ;<KKRS(( 	E%L	r5   c                      t               }|j                  t               |t         fd              }t	         t
        t        t        f      st        j                  d        j                  D ]
  } ||        y )Nc                    	j                   |    }	j                  |    }|j                         }d|d d df<   	j                  |      }t	        |      }t        |      }t        |      }t        |      }t        ||k7  ||k7  j                                t        ||k7  ||k7  j                                t        ||k7  ||k7  j                                t        ||k7  ||k7  j                                t        ||k7  ||k7  j                                t        ||k7  ||k7         t        |dk7  |dk7  j                                t        |dk7  |dk7  j                                t        d|k7  d|k7  j                                t        d|k7  d|k7  j                                t        |t        j                  k7  |t        j                  k7  j                                y r   )r   r   r   r   r   r   r   r   r<   r   rC   r   )
r8   r   r   r   r  r  r  r  r  r   s
            r3   r   z"_TestCommon.test_ne.<locals>.checkc  s    //%(C%%e,E88:DD1I^^D)F_F_F_F_F %SD[5F?2K2K2MN$SD[6V3C2L2L2NO$SD[6V3C2L2L2NO$SD[6V3C2L2L2NO$SD[6V3C2L2L2NO$SF]FcMB$SAX
/C/C/EF$SAX
/C/C/EF$Q#XU
/C/C/EF$Q#XU
/C/C/EF$SBFF]&+rvvo%>%>%@Br5   r  r  r  s   `   r3   test_nez_TestCommon.test_ne_  sp    !

*+			B 
 
	B8 $'7 ;<KKRS(( 	E%L	r5   c                      t               }|j                  t               |t         fd              }t	         t
        t        t        f      st        j                  d        j                  D ]
  } ||        y )Nc                 N   j                   |    }j                  |    }|j                         }d|d d df<   j                  |      }|j	                  t
              }d|d d df<   j                  |      }t        |      }t        |      }t        |      }	t        |      }
t        ||k  ||k  j                                t        ||k  ||k  j                                t        ||k  ||k  j                                t        ||k  ||k  j                                t        ||k  |	|k  j                                t        ||k  |
|k  j                                t        ||k  ||k  j                                t        ||k  ||k  j                                t        ||k  ||	k  j                                t        ||k  ||
k  j                                t        ||k  ||k         t        ||k  ||k         dD ]W  }t        j                  |      }t        ||k  j                         ||k         t        ||k  j                         ||k         Y t        j                  d      5  t        |t        j                  k  j                         |t        j                  k         d d d        j                   |    }j                  |    }|j                         }d|d d df<   j                  |      }t        ||k  ||k         y # 1 sw Y   dxY wNr         ?      ?)r_   r   r   ignoreinvalidr   r   r   r   rn   complexr   r   r   r   r<   r   rC   r`   errstater   r8   r   r   r   r  
datcomplexdatspcomplexr  r  r  r  valr   s               r3   r   z"_TestCommon.test_lt.<locals>.check  s    //%(C%%e,E88:DD1I^^D)FG,J$JqsO>>*5L_F_F_F_F %S4Z%&.1I1I1KL$Z$%6&2V&;%D%D%FH %S4Z&6/1J1J1LM$S4Z&6/1J1J1LM$S4Z&6/1J1J1LM$S4Z&6/1J1J1LM$TCZ&6/1J1J1LM$TCZ&6/1J1J1LM$TCZ&6/1J1J1LM$TCZ&6/1J1J1LM$S4Z>$Z$%6t8KL( Mhhsm(%#+)>)>)@#)L(#+)>)>)@#)LM
 X. 7(%"&&.)A)A)C),rvv77
 //%(C%%e,E88:DD1I^^D)F %S6\54<@7 7   ;=LL$r  r  r  s   `   r3   test_ltz_TestCommon.test_lt  sq    !

*+		2	A 
 
2	Ah $'7 ;<KKRS(( 	E%L	r5   c                      t               }|j                  t               |t         fd              }t	         t
        t        t        f      st        j                  d        j                  D ]
  } ||        y )Nc                 N   j                   |    }j                  |    }|j                         }d|d d df<   j                  |      }|j	                  t
              }d|d d df<   j                  |      }t        |      }t        |      }t        |      }	t        |      }
t        ||kD  ||kD  j                                t        ||kD  ||kD  j                                t        ||kD  ||kD  j                                t        ||kD  ||kD  j                                t        ||kD  |	|kD  j                                t        ||kD  |
|kD  j                                t        ||kD  ||kD  j                                t        ||kD  ||kD  j                                t        ||kD  ||	kD  j                                t        ||kD  ||
kD  j                                t        ||kD  ||kD         t        ||kD  ||kD         dD ]W  }t        j                  |      }t        ||kD  j                         ||kD         t        ||kD  j                         ||kD         Y t        j                  d      5  t        |t        j                  kD  j                         |t        j                  kD         d d d        j                   |    }j                  |    }|j                         }d|d d df<   j                  |      }t        ||kD  ||kD         y # 1 sw Y   dxY wr  r  r  s               r3   r   z"_TestCommon.test_gt.<locals>.check  s    //%(C%%e,E88:DD1I^^D)FG,J$JqsO>>*5L_F_F_F_F %S4Z%&.1I1I1KL$Z$%6&2V&;%D%D%FH %S4Z&6/1J1J1LM$S4Z&6/1J1J1LM$S4Z&6/1J1J1LM$S4Z&6/1J1J1LM$TCZ&6/1J1J1LM$TCZ&6/1J1J1LM$TCZ&6/1J1J1LM$TCZ&6/1J1J1LM$S4Z>$Z$%6t8KL( Mhhsm(%#+)>)>)@#)L(#+)>)>)@#)LM
 X. 7(%"&&.)A)A)C),rvv77
 //%(C%%e,E88:DD1I^^D)F %S6\54<@7 7r#  r  r  r  s   `   r3   test_gtz_TestCommon.test_gt  sq    !

*+		1	A 
 
1	Af $'7 ;<KKRS(( 	E%L	r5   c                      t               }|j                  t               |t         fd              }t	         t
        t        t        f      st        j                  d        j                  D ]
  } ||        y )Nc                    j                   |    }j                  |    }|j                         }d|d d df<   j                  |      }|j	                  t
              }d|d d df<   j                  |      }t        |      }t        |      }t        |      }	t        |      }
t        ||k  ||k  j                                t        ||k  ||k  j                                t        ||k  j                         ||k         t        ||k  j                         ||k         t        |	|k  j                         ||k         t        |
|k  j                         ||k         t        ||k  j                         ||k         t        ||k  j                         ||k         t        ||	k  j                         ||k         t        ||
k  j                         ||k         t        ||k  ||k         t        ||k  ||k         dD ]W  }t        j                  |      }t        ||k  j                         ||k         t        ||k  j                         ||k         Y j                   |    }j                  |    }|j                         }d|d d df<   j                  |      }t        ||k  ||k         y Nr   r  )r_   r   r  r  r   r   r   r   rn   r  r   r   r   r   r<   r   rC   r`   r  s               r3   r   z"_TestCommon.test_le.<locals>.check      //%(C%%e,E88:DD1I^^D)FG,J$JqsO>>*5L_F_F_F_F %SD[5F?2K2K2MN$Z4%7&2f&<%E%E%GI %f&6%?%?%A3$;O$f&6%?%?%A3$;O$f&6%?%?%A3$;O$f&6%?%?%A3$;O$f&6%?%?%A43;O$f&6%?%?%A43;O$f&6%?%?%A43;O$f&6%?%?%A43;O$Ud]C4K@$\T%9:;MN% Ohhsm(%3,)?)?)A3#:N(#,)?)?)A3#:NO //%(C%%e,E88:DD1I^^D)F %SF]ETMBr5   r  r  r  s   `   r3   test_lez_TestCommon.test_le  q    !

*+		-	C 
 
-	C^ $'7 ;<KKRS(( 	E%L	r5   c                      t               }|j                  t               |t         fd              }t	         t
        t        t        f      st        j                  d        j                  D ]
  } ||        y )Nc                    j                   |    }j                  |    }|j                         }d|d d df<   j                  |      }|j	                  t
              }d|d d df<   j                  |      }t        |      }t        |      }t        |      }	t        |      }
t        ||k\  ||k\  j                                t        ||k\  ||k\  j                                t        ||k\  j                         ||k\         t        ||k\  j                         ||k\         t        |	|k\  j                         ||k\         t        |
|k\  j                         ||k\         t        ||k\  j                         ||k\         t        ||k\  j                         ||k\         t        ||	k\  j                         ||k\         t        ||
k\  j                         ||k\         t        ||k\  ||k\         t        ||k\  ||k\         dD ]W  }t        j                  |      }t        ||k\  j                         ||k\         t        ||k\  j                         ||k\         Y j                   |    }j                  |    }|j                         }d|d d df<   j                  |      }t        ||k\  ||k\         y r*  r+  r  s               r3   r   z"_TestCommon.test_ge.<locals>.checkA  r,  r5   r  r  r  s   `   r3   test_gez_TestCommon.test_ge=  r.  r5   c                    t        | j                  d      j                         t        d             t        | j                  d      j                  d       t        | j                  d      j                         d       y )Nr   r   r   )r   r   r   r   nnzcount_nonzeror   s    r3   
test_emptyz_TestCommon.test_emptyw  sW    T^^F+335uV}ET^^F+//3T^^F+99;Q?r5   c                    t        j                  | j                  j                               }t	        | j                  j                         |       t	        | j                  j
                  j                         |       y r7   )rC   r5  r   r   r   T)r   expecteds     r3   test_count_nonzeroz_TestCommon.test_count_nonzero}  sQ    ##DJJ$6$6$89TZZ--/:TZZ\\//18<r5   c                     t        t        | j                  d       t        t        | j                  d       t        t        | j                  d       y )Nr  r   r   r  r  r  )r   r   r   r   s    r3   test_invalid_shapesz_TestCommon.test_invalid_shapes  s2    j$..&9j$..&9j$..':r5   c                 .    t        | j                         y r7   )reprr   r   s    r3   	test_reprz_TestCommon.test_repr  s    TZZr5   c                 .    t        | j                         y r7   )strr   r   s    r3   test_strz_TestCommon.test_str  s    DJJr5   c                    d}t        j                  d      t        j                  d      t        j                  d      t        j                  d      t        j                  d      fD ]  }| j                  ||      }||z   }d|z  }||j                         z  }||j	                         z  }||j                         z  }||||||fD ]u  }	t        |	j                         |j                         |j                         z         t        |	j                  |       t        |	j                         j                  |       w  y )	N   rH  rS   float32r   	complex64
complex128r8   r_   )rC   r8   r   tocsctocsrtocoor   r   )
r   r   mytyperG   rL   cr   efms
             r3   test_empty_arithmeticz!_TestCommon.test_empty_arithmetic  s   xx("((9*=#RXXk%:&( 	7F uF3AAAAAAGGIAAGGIAAGGIA!Aa] 7QYY[!))+aiik*ABQWWV,QYY[..v6	7	7r5   c                     t        g dg dg dg dgd      }t        t        |      t        | j                  |            j	                                y )Nr  r      r   r   r   r   r   r   r   r   )r   r   absr   r   r   rJ   s     r3   test_absz_TestCommon.test_abs  s<    ;
J	BCHSVS!23;;=>r5   c                     d}t        ddgddggd      }t        t        j                  ||      t	        | j                  |      |      j                                y )	Nr   ggQ?g     @1@gQr   )decimals)ndigits)r   r   rC   aroundroundr   r   )r   decimalrJ   s      r3   
test_roundz_TestCommon.test_round  sR    E4=5%.137RYYq734>>!,g>FFH	Jr5   c                    t        g dg dg dgd      }t        t        j                  |d      | j	                  |      j                  d      j                                t        t        | j	                  |      j                  |       y )N)r\  r  )r  r   r   r_   r      r   r_   )r   r   rC   powerr   r   r   NotImplementedErrorr_  s     r3   test_elementwise_powerz"_TestCommon.test_elementwise_power  sd    <Y7=RXXa^T^^A%6%<%<Q%?%G%G%IJ 	)4>>!+<+B+BAFr5   c                     t        g dg dg dg dgd      }t        | | j                  |       j                                t        g dg dg      }t	        t
        | j                  |      j                         y )NrW  rY  r[  r]  r   )TFF)FFT)r   r   r   r   r   rm  __neg__r_  s     r3   test_negz_TestCommon.test_neg  se    ;
J	BCHaR4>>!,,5578 ')=>?)4>>!+<+D+DEr5   c                     t        ddgg      }| j                  |      }t        |j                  j	                         |j                         y N      ?      @y       @      )r   r   r   realr   r   DrJ   s      r3   	test_realz_TestCommon.test_real  ;    FF#$%NN1QVV^^%qvv.r5   c                     t        ddgg      }| j                  |      }t        |j                  j	                         |j                         y rs  )r   r   r   imagr   rv  s      r3   	test_imagz_TestCommon.test_imag  ry  r5   c           	         g }|j                  g dg       |j                  dgdgdgg       |j                  ddgddgddgg       |j                  g dg dg dg       |j                  ddgddgg       |j                  t        |d   ddgg             |j                  t        |d   dgdgg             |j                  t        |d   ddgdd	gg             |j                  t        |d   ddgdd	gg             |j                  t        |d   ddgdd	gg             |j                  t        |d   g d
g             |D ]  }t        |      j                  \  }}| j	                  |      }t        | dz
  |dz         D ])  }t        |j                  |      t        ||             + t        |j                  d      t        |d             t        |j                  d      t        |d              t        | j	                  d      j                         t        j                  d             t        | j	                  d      j                         t        j                  d             t        | j	                  d      j                         t        j                  d             t        | j	                  d      j                  d      t        j                  d             y )Nr   r   r_   r   r   r_   r   r   r   r   )r   r   r_   r   r   r   rk  r   r_   r   rk  krO   i)(   i?  r  r   r   )   r   r   rH  )rE   r   r   r   r   r   r   diagonalr   rC   r   empty)r   matsrT  rowscols
sparse_matr  s          r3   test_diagonalz_TestCommon.test_diagonal  sy   WIaS!aSM"aUAa5!A'(WWW-.aUAa5M"Da1Q%)*Da1#qc+,Da1Q%1/0Da1Q%1/0Da1Q%1/0Da)-. 	EAqJD$*JD57DF+ EZ00105tA|DE ,,r,2DbMB,,s,3T!s^D	E 	T^^K099;RXXb\J 	T^^F+446DT^^G,557!ET^^F+44R8"((1+Fr5   c                    t        j                  g dg dg dg      }| j                  |      }t        dd      D ].  }t	        |j                  |      |j                  |             0 t        j                  g dg dg      }| j                  |      }t        dd      D ].  }t	        |j                  |      |j                  |             0 y )Nr   r_   r   rk  rH     )      	   r  r   )offsetr  )rC   r   r   r   r   trace)r   rJ   rK   r  s       r3   
test_tracez_TestCommon.test_trace  s    HHiI67NN1r1 	?A*AGG1G,=>	? HHi+,NN1r1 	?A*AGG1G,=>	?r5   c           	         | j                  g dg dg dg dg      }dD ]S  }dD ]L  }t        |j                  ||      j                         |j                         j                  ||             N U | j                  g dg d	g d
g      }|j                  d      }g dg dg}t        |j                         |       |j                  d      }t        |j                         |       |j                  d      }t        |j                         |       t	        t
        |j                  d       |j                  dd      }t        |j                         |       t	        t        |j                  ddd       |j                  d      }t        ||u        |j                  dd      }t        ||u       t        |j                  d       d|_        t        |j                         |       t	        t
        |j                  |j                  f       t	        t
        |j                  d|j                  df       y )N)r   r   r  r]  r  )r   r   rH  )CF))   r   )r   r  orderr   rO   r   r   r   r   r   r   r         r  r_   r  )r   rO   r   r   r   r   )r   r   r   r  r  r  r_   r  )r  r  r>  r_   r  r   )
not_an_argr   rk  Tr   )
r   r   reshaper   r   r   	TypeErrorr   r   re   )r   r9   r  sr:   desireds         r3   test_reshapez_TestCommon.test_reshape  s   NNIy)YGH 	HE' H"199Qe9#<#D#D#F#$99;#6#6q#6#FHH	H NNM<IJIIf&(=>199;0 IIg199;0IIg199;0j!))X6 IIaO199;0iAqQ? IIfQIIf4I(
 	177F+ 199;0 	j!))affY7j!))a^<r5   c                    fdfd}t         j                  j                  d       g d}t         j                  t         j                  fD ]  }|D ]  \  }}t        j
                  | dz   |dz
        }|D ]  }t        ||||f      t        j                  ||f|      }| j                  ||f|      }	 |||	|       t         j                  j                  |t        t        |      d            D ]  }
 |||	|
           y )	Nc                    t        j                  |      }|dk\  rt        | j                  d   | j                  d   |z
        }|j                  dk7  rt        |t        |            }|d | }t        j                  d|      }t        j                  |||z         }|| ||f<   y |dk  r | j                  ||        y y r   )rC   r   rh   r   r   r   r   r8  )rG   vr  nijdense_setdiags         r3   r  z=_TestCommon.test_setdiag_comprehensive.<locals>.dense_setdiag  s    

1AAv
AGGAJN366Q;As1vA"1AIIaOIIaQ'!A#Qacc1qb) r5   c                    dt        t        j                  | |            ddfD ]?  }|dk  r*t        j                  j	                  t        dd            }n"t        j                  j                  dd|      } 	| ||       t               5 }d}|j                  t        |       |j                  ||       d d d        t        j                  | |      }t        j                  |      j                  dk(  rt        ||d	
|fz  
       n7t        t        |      t        |            }t        |d | |d | d	
|fz  
       t        |j                         | d	
|fz  
       B y # 1 sw Y   xY w)Nr  r_   r  r   r   r  re   ?Changing the sparsity structure of a cs[cr]_matrix is expensivez%s %derr_msg)r   rC   r   r   choicer   ra   r   r  r"   setdiagr   r   r   rh   r   )rG   rL   r  rr  r  r2   r   r  r  r/   s            r3   check_setdiagz=_TestCommon.test_setdiag_comprehensive.<locals>.check_setdiag+  sB    #bggam,a4 Oq5		((q"6A		))!Ra)8AaA&&( $C >GJJ6@IIaO	$ GGAqM::a=%%*&q!WQx5GHCFCF+A&q!uaeWQx=OP"199;7c1X;MN+O$ $s   +E))E2	r\   )r  rH  r   r   rH  rH  r   rG  r   rL  rH  r  )rC   r   r]   r   r   r   rA  r   r   r  rh   r   )r   r  shapesr8   rT  r  ksr  rG   rL   k2r  r/   s              @@r3   test_setdiag_comprehensivez&_TestCommon.test_setdiag_comprehensive  s   	*	O6 			t4ggrzz* 	0E 0!YYr!tQqS) 	0Aq!Q/0C!Qu5A1vU;A!!Q* !ii..rCGQ.H 0%aB/0	00	0r5   c           
      *   | j                  t        j                  d            }| j                  d      }g d}t               5 }|j	                  t
        d       t        t        |j                  |d       |j                  |       t        |j                         |       |j                  |d       t        |j                         t        j                  g dg d	g d
g             |j                  |d       t        |j                         t        j                  g dg d	g dg             |j                  dd       t        |j                         d   d       |j                  dd       t        |j                         d   d       |j                  dgd       t        |j                         d   g d       |j                  ddgd       t        |j                         d d g dg dg       d d d        y # 1 sw Y   y xY w)Nr   rk  rk  )r   r_   r   r  rk  r  r   )r   r   r   )r   r_   r_   r  r  )r   r   r   )r  r_   r   r_   r  r_   r   r   r   r   r   r   )r   r   r   r   )r   rC   r    r   r  r"   r   r   r  r   r  r   r   )r   rT  m2rA   r  s        r3   test_setdiagz_TestCommon.test_setdiagV  s   NN266!9%^^F#  	ACJJ'Q *aii1=IIfqzz|V4IIfI"qyy{BHHi6?6?6A -B C IIfI#qyy{BHHi6?6?6A -B C IIdaI qyy{3/3IIdbI!qyy{3/3JJsaJ rzz|A=JJ1vJ#rzz|BQ/,2>2@ A3	A 	A 	As   F<H		Hc                 6   t        g dg dg dg      }| j                  |      }t        |j                               D ch c]  }t	        |       }}t        |j                               D ch c]  }t	        |       }}t        ||       y c c}w c c}w Nr   r   r   r   r   r   r  )r   r   r   nonzerotupler   r   rJ   AspijA_nzAsp_nzs         r3   test_nonzeroz_TestCommon.test_nonzerow  sw    9Yy12nnQ$-aiik$:;bb	;;&/&>?%)??T6" <?s   B0Bc                 J   t        g dg dg dg      }| j                  |      }t        t        j                  |            D ch c]  }t        |       }}t        t        j                  |            D ch c]  }t        |       }}t        ||       y c c}w c c}w r  )r   r   r   rC   r  r  r   r  s         r3   test_numpy_nonzeroz_TestCommon.test_numpy_nonzero  s{    9i34nnQ$-bjjm$<=bb	==&/

3&@A%)AAT6" >As   B:B c                    t        | j                  j                  d      j                         | j                  dgd d f          t        | j                  j                  d      j                         | j                  dgd d f          y Nr   r  )r   r   getrowr   r   r   s    r3   test_getrowz_TestCommon.test_getrow  sd    4::,,Q/779488QCF;KL4::,,R088:DHHbT1W<MNr5   c                    t        | j                  j                  d      j                         | j                  d d dgf          t        | j                  j                  d      j                         | j                  d d dgf          y r  )r   r   getcolr   r   r   s    r3   test_getcolz_TestCommon.test_getcol  sd    4::,,Q/779488AsF;KL4::,,R088:DHHQW<MNr5   c                    	 t         j                  j                  d       t        g dg dg dg      }t         j                  j	                  dd      }t        j
                  g g      }t        j                  d      }t        j                  ddd      j                         }|||||g		 fd	} j                  D ]$  }t        t        	            D ]  } |||        & y )
Nr\   r   r   r_   r   r\  rH  r  r  rH  )r  r  g{Gz?)densityc                    t        |   |       }j                  ||       }t        j                  d      5  t	        |j                         |j                                t        |j                         j                  |j                         j                         t        t        j                  |j                  d                    t	        |j                  d       |j                  d              t        |j                  d       j                  |j                  d       j                         t	        |j                  d      |j                  d             t        |j                  d      j                  |j                  d      j                         t	        |j                  d      |j                  d             t        |j                  d      j                  |j                  d      j                         t	        |j                  d      |j                  d             t        |j                  d      j                  |j                  d      j                         t	        |j                  d      |j                  d             t        |j                  d      j                  |j                  d      j                         d d d        y # 1 sw Y   y xY w)	NrL  r  )overaxisr   r   r  r  )
r(   r   rC   r  r   sumr   r8   r   isscalar)r8   r  r   r   matricesr   s       r3   r   z#_TestCommon.test_sum.<locals>.check  s   !E2CNN3eN4E(+ O)#'')UYY[ASWWY__eiik.?.?@EII4I$89:)#''t'*<*/)))*>@SWW$W/55"YYDY1779)#''q'/599!9;LMSWW!W_22EII1I4E4K4KL)#''q'/599!9;LMSWW!W_22EII1I4E4K4KL)#''r'*:EII2I<NOSWW"W-33UYYBY5G5M5MN)#''r'*:EII2I<NOSWW"W-33UYYBY5G5M5MNO O Os   J/K33K<)rC   r   r]   r(   randr   r   ru   r   r   r   r   )
r   dat_1dat_2dat_3dat_4dat_5r   r8   r  r  s
   `        @r3   test_sumz_TestCommon.test_sum  s    
		t	""$ % 		q!$""Aq$/7795%6	O( (( 	 E3x=)  eQ 	 r5   c                 Z   t        j                  d      }t        g dg dg dg      }| j                  |      }t	        t
        |j                  d       t	        t        |j                  d       t	        t        |j                  d       t	        t
        |j                  d	|
       y Nr   r   r  r  r  r   r  r   r         ?r   r  out)rC   r   r   r   r   r   r  r  r   r  r   r   s       r3   test_sum_invalid_paramsz#_TestCommon.test_sum_invalid_params  sy    hhvY! " s#j%))!4i8i5j%))!=r5   c                     t        g dg dg dg      | j                        fd}| j                  D ]
  } ||        y )Nr  r  r  c                     j                  |       }j                  |       }t        ||       t        |j                  |j                         y NrL  meanr   r   r8   r8   dat_mean
datsp_meanr   r   s      r3   r   z)_TestCommon.test_sum_dtype.<locals>.check  A    xxex,H%0J%h
;)9)9:r5   r   r   r   r   r   r8   r   r   s      @@r3   test_sum_dtypez_TestCommon.test_sum_dtype  M    Y! " s#	; (( 	E%L	r5   c                    t        g dg dg dg      }| j                  |      }t        dgg      }t        dgg      }|j                  |d       |j                  |       t	        ||       t        j                  d      }t        t        j                  d            }|j                  d	|d
       |j                  d	|       t	        ||       y Nr  r  r  r   T)r  keepdimsr  r   r   r   )r  r  r  r  )r   r   r(   r  r   rC   r   r'   r   r   r   dat_out	datsp_outs        r3   test_sum_outz_TestCommon.test_sum_out  s    Y! " s#!,QC5M	Gd+		i	 !'95((6"RXXf-.	QGd3		qi	(!'95r5   c                     t        g dg dg dg      }| j                  |      }t        j                  |      }t        j                  |      }t	        ||       t        |j                  |j                         y Nr  r  r  )r   r   rC   r  r   r   r8   r   r   r   r  r  s        r3   test_numpy_sumz_TestCommon.test_numpy_sum  sa    Y! " s#66#;VVE]
!(J7X^^Z%5%56r5   c                 B      fd} j                   D ]
  } ||        y )Nc                    t        g dg dg dg|       }j                  ||       }t        |j                         |j                                t	        |j                         j
                  |j                         j
                         t        t        j                  |j                  d                    t        |j                  d d      |j                  d              t	        |j                  d       j
                  |j                  d       j
                         t        |j                  dd      |j                  d             t	        |j                  d      j
                  |j                  d      j
                         t        |j                  d	d      |j                  d	             t	        |j                  d	      j
                  |j                  d	      j
                         t        |j                  d
d      |j                  d
             t	        |j                  d
      j
                  |j                  d
      j
                         t        |j                  dd      |j                  d             t	        |j                  d      j
                  |j                  d      j
                         y )Nr  r   rk  rH  )r  r  r  rL  r  Tr  r  r   r   r  r  )	r   r   r   r  r   r8   r   rC   r  r8   r   r   r   s      r3   r   z$_TestCommon.test_mean.<locals>.check  s$   ""$+02C NN3eN4E%chhj%**,?))5::<+=+=>BKK


 567%dT2EJJDJ4I t,22EJJDJ4I4O4OP%a$/1C q)//1C1I1IJ%a$/1C q)//1C1I1IJ%b40%**"*2E r*00%**"*2E2K2KL%b40%**"*2E r*00%**"*2E2K2KLr5   )r   r   s   `  r3   	test_meanz_TestCommon.test_mean  s'    	M< (( 	E%L	r5   c                 l   t        t        j                  d            }t        g dg dg dg      }| j	                  |      }t        t        |j                  d       t        t        |j                  d       t        t        |j                  d       t        t        |j                  d	|
       y r  )	r'   rC   r   r   r   r   r   r  r  r  s       r3   test_mean_invalid_paramsz$_TestCommon.test_mean_invalid_params  s~    rxx'(Y! " s#j%**15i&9i#6j%**1#>r5   c                     t        g dg dg dg      | j                        fd}| j                  D ]
  } ||        y )Nr  r  r  c                     j                  |       }j                  |       }t        ||       t        |j                  |j                         y r   r  r  s      r3   r   z*_TestCommon.test_mean_dtype.<locals>.check&  r  r5   r  r  s      @@r3   test_mean_dtypez_TestCommon.test_mean_dtype   r
  r5   c                    t        g dg dg dg      }| j                  |      }t        dgg      }t        dgg      }|j                  |d       |j                  |       t	        ||       t        j                  d      }t        t        j                  d            }|j                  d	|d
       |j                  d	|       t	        ||       y r  )r   r   r(   r  r   rC   r   r  s        r3   test_mean_outz_TestCommon.test_mean_out0  s    Y! " s#!,QC5M	Wt,

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

y
)!'95r5   c                     t        g dg dg dg      }| j                  |      }t        j                  |      }t        j                  |      }t	        ||       t        |j                  |j                         y r  )r   r   rC   r  r   r   r8   r  s        r3   test_numpy_meanz_TestCommon.test_numpy_meanD  sa    Y! " s#773<WWU^
!(J7X^^Z%5%56r5   c                    t        g dg dg dgt              }| j                  |dt              }t        j                  j                  |      }t        g dg dg dg      }| j                  |dt              }t        j                  j                  |      }t               5 }|j                  t        d	       |j                  t        d
       |j                  t        d       t        |      j                         }t        |      j                         }	d d d        t        |z
  t        d             t        	|z
  t        d             y # 1 sw Y   :xY w)Nr~  r   r   r   r\  rH  r  r3  r   r8   )      @              ?)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   rt   linalgr*   r   r  r"   r   r   r   )
r   MsMMexpNsNNexpr  sMexpsNexps
             r3   	test_expmz_TestCommon.test_expmQ  s   9i4e<^^AU%^8||  #<|<=^^AU%^8||  #  	'CJJ'8 JJ'U JJ'@ H$$&EH$$&E	'  	"54<%-@!54<%-@#	' 	's   &A5EEc                 8      fd}t         fD ]
  } ||        y )Nc                    t        g dg dg dg|       }t               5 }|j                  t        d       |j                  t        d       |j                  t        d       j	                  |d|       }t        |      }d d d        t        j                        j                         t        j                  d	             t        t        t
        |       y # 1 sw Y   [xY w)
Nr~  r(  r)  r1  r0  r/  r3  r*  r   )r   r   r  r"   r   r+   r   r   r   rC   r    r   r  )r8   r4  r  r5  sMinvr   s        r3   r   z#_TestCommon.test_inv.<locals>.checkn  s    y)Z8%@A"$ 	 

2KN

29; 

2CF^^AU%^@B	  &eiim&;&;&=rvvayI)S!,	  	 s   A"CC&)r2  r   s   `  r3   test_invz_TestCommon.test_invm  s"    	- W 	E%L	r5   c                 r   t        g dg dg dg dg      }t        | j                  |      j                         |       t        g dg dg dg      }t        | j                  |      j                         |       t        | j                  |d      j                         |j	                  d             y 	Nr   r   r   rj  )r   rH  r   r]  )rt  r   r   )r         @r   int16rL  )r   r   r   r   rn   r_  s     r3   test_from_arrayz_TestCommon.test_from_array  s    7777344>>!,446:#"  	4>>!,446:4>>!7>;CCEahhwFWXr5   c                 r   t        g dg dg dg dg      }t        | j                  |      j                         |       t        g dg dg dg      }t        | j                  |      j                         |       t        | j                  |d      j                         |j	                  d             y rB  )r(   r   r   todensern   r_  s     r3   test_from_matrixz_TestCommon.test_from_matrix  s    Iy)Y?@4>>!,446:$#   	4>>!,446:NN1GN,4468I	
r5   c                 r   g dg dg dg dg}t        | j                  |      j                         |       g dg dg dg}t        | j                  |      j                         t        |             t        | j                  |d      j                         t        |      j	                  d             y rB  )r   r   r   r   rn   r_  s     r3   test_from_listz_TestCommon.test_from_list  s    WWW-4>>!,446: 	4>>!,446aANN1GN,446a8P	
r5   c                    t        g dg dg dg dg      }t        |      }t        | j                  |      j	                         |       | j                  |      }t        | j                  |      j	                         |       t        g dg dg dg      }t        |      }t        | j                  |      j	                         |       t        | j                  |d      j	                         |j                  d             | j                  |      }t        | j                  |      j	                         |       t        | j                  |d      j	                         |j                  d             y rB  )r   r   r   r   r   rn   r   rw  Ss      r3   test_from_sparsez_TestCommon.test_from_sparse  s%   777734qM4>>!,446:NN14>>!,446:#"  qM4>>!,446:4>>!7>;CCE88G,	.NN14>>!,446:4>>!7>;CCE88G,	.r5   c                 :   | j                   j                         }t        |t        j                        sJ t        || j                         t        |j                  j                  |j                  j                  k7         | j                   j                  d      }t        || j                         t        |j                  j                         t        |j                  j                          | j                   j                  d      }t        || j                         t        |j                  j                          t        |j                  j                         t        j                  | j                   j                  | j                   j                        }| j                   j                  |      }t        | j                  |       t        | j                  |       t        j                  ||      sJ t        t        j                  | j                   j                  | j                   j                              }| j                   j                  |      }t        | j                  |       t        | j                  |       t        j                  ||      sJ t!        g dg      }|| j                  z  }|| j                   j                         z  }t        ||       t!        g dg      j"                  }| j                  |z  }| j                   j                         |z  }t        ||       | j%                  | j                  t&              }| j                  j)                  t&              }	t        |j                         |	       y )Nr  r  r  rL  r  r-  r.  r+  r-  r.  r+        @)r   rH  rB   rC   r(   r   r   r   flagsc_contiguousf_contiguousr   r   r8   rI   r'   r   r8  r   r   rn   )
r   chkr  rG   dense_dot_denser   rL   check2spboolmatbools
             r3   test_todensez_TestCommon.test_todense  s   jj  "#ryy)))3)		&&#))*@*@@Ajj  s +3)		&&'CII***+jj  s +3)CII***+		&&'hhtzz''tzz/?/?@jj  S )488S)488S)""3,,,rxx

 0 0

8H8HIJjj  S )488S)488S)""3,,,:,dhh,DJJ&&((?E2=/"$$((Q,##%)?F35((//$'6>>+W5r5   c                 n   t        | j                        }| j                  j                         }t	        ||       t        |j                  j                  |j                  j                  k7         | j                  j                  d      }t	        ||       t        |j                  j                         t        |j                  j                          | j                  j                  d      }t	        ||       t        |j                  j                          t        |j                  j                         t        j                  | j                  j                  | j                  j                        }| j                  j                  |       t	        ||       d|d<   | j                  j                  |       t	        ||       t        g d      }t        ||      }t        || j                  j                               }t	        ||       t        g d	      }t        ||      }t        | j                  j                         |      }t	        ||       | j                  | j                  t               }	|j#                  t               }
t	        |	j                         |
       y )
Nr  r  r  rL  r  r-  .rQ  rR  )r   r   r   r   r   r   rT  rU  rV  rC   r   r   r8   r   r   r   r   rn   )r   r   rW  r  rG   rX  r   rL   rY  rZ  arrbools              r3   test_toarrayz_TestCommon.test_toarray  s   dhhjj  "3$		&&#))*@*@@Ajj  s +3$		&&'CII***+jj  s +3$CII***+		&&'hhtzz''tzz/?/?@

s#3$C

s#3$*a+Atzz))+,?E2- c1+TZZ'')1-?F35**T"6>>+W5r5   c                   	 t        g dg dg dg      }| j                  |      }t        D ]*  }|j                  |      }dD ]o  }|j                  ||      t	        j
                  |j
                         t	        j                         |       t	        j                  |j                         q t        j                  |d      u        j                  |d      	t        	u       	fd}j                  d	v rd
D ]
  } ||        j                  dk(  rdD ]
  } ||        j                  dk(  sdD ]
  } ||        - y )Ny       @      @r   r   r   y      @      @r   r]  )TFr  FTc                     t        |       }t        |       }t        ||       t        ||u       d|j                  z  }||   }||    ||<   t        ||   ||   k7         |||<   y )N)r   )r   r   r   r   )	attributerG   rL   r  b_iS_castedS_copieds        r3   (check_equal_but_not_same_array_attributezI_TestCommon.test_astype.<locals>.check_equal_but_not_same_array_attribute  ss    Hi0Hi0"1a(
#166MdQ4x!!!%!r5   csrcscbsr)indicesindptrdatacoo)rowcolro  dia)offsetsro  )	r   r   r$   rn   r   r8   r   formatr   )
r   rw  rN  r9   D_castedr   rh  rd  rf  rg  s
           @@r3   test_astypez_TestCommon.test_astype
  sS   ##  NN1!  	HAxx{H% 888AD81X^^X^^<X--/:X__ahh7	8 HOOAEO2h>?qt4HHH,-	 "77!> HI<YGHE)!7 HI<YGHE)!4 HI<YGH? 	Hr5   c                    t        g dg dg dg      }| j                  |      }t        |d      rd|j                  j                  _        |j                  dv r6d|j                  j                  _        d|j                  j                  _        t        D ]D  }|j                  |      }|j                  |      }t        |j                  |j                         F y )Nra  rb  r]  ro  Fri  )r   r   hasattrro  rT  	writeableru  rn  rm  r$   rn   r   r8   )r   rw  rN  r9   rv  rf  s         r3   test_astype_immutablez!_TestCommon.test_astype_immutable3  s    ##  NN11f%*AFFLL"88,,',AHHNN$(-AIIOO%! 	9Axx{Hxx{H8	9r5   c                    | j                  t        dd      j                  dd            }t        |j                  t        j                  d             t        |j                         j                  t        j                  d             t        |j                         j                  |j                         t        |j                  d      j                         j                  t        j                  d             t        |j                  d	      j                         j                  t        j                  d	             |j                         }|j                         }t        ||u        y )
Nr  rS   rL  r_   r   r   rE  rI  rK  )
r   r   r  r   r8   rC   asfptyperu  rn   r   )r   rJ   rK   r  s       r3   test_asfptypez_TestCommon.test_asfptypeD  s    NN6!'2::1Q?@QWWbhhw/0QZZ\''))<=QZZ\((!((3QXXg&//177)9LMQXXl+446<<bhh|>TUJJLJJLQr5   c                 B      fd} j                   D ]
  } ||        y )Nc                     j                   |    }j                  |    }t        |dz  |dz  j                                t        |dz  |dz  j                                y Nr_   L1@r   r   r   r   r  s      r3   r   z*_TestCommon.test_mul_scalar.<locals>.checkR  sW    //%(C%%e,Es1uuQw&7&7&9:s4x%*)=)=)?@r5   r   r   s   `  r3   test_mul_scalarz_TestCommon.test_mul_scalarQ  '    	A %% 	E%L	r5   c                 B      fd} j                   D ]
  } ||        y )Nc                     j                   |    }j                  |    }t        d|z  d|z  j                                t        d|z  d|z  j                                y r  r  r  s      r3   r   z+_TestCommon.test_rmul_scalar.<locals>.check]  sW    //%(C%%e,Equqw&7&7&9:tCx$u*)=)=)?@r5   r  r   s   `  r3   test_rmul_scalarz_TestCommon.test_rmul_scalar\  r  r5   c                     | j                   t        j                     }t        t              5  d |z   d d d        y # 1 sw Y   y xY wr7   )r   rC   r   r   r  )r   r   s     r3   test_rmul_scalar_type_errorz'_TestCommon.test_rmul_scalar_type_errorh  s:    !!"**-9% 	5L	 	 	s	   <Ac                 B      fd} j                   D ]
  } ||        y )Nc                    j                   |    }j                  |    }|j                         }d|d<   |}||z   }t        ||j	                         |z          ||j                         z   }t        |j	                         |j	                         |j	                         z          ||d   z   }t        ||j	                         |d   z          y )Nr.  r  r   )r   r   r   r   r   rN  r8   r   r   rG   rL   rQ  r   s         r3   r   z#_TestCommon.test_add.<locals>.checkn  s    //%(C%%e,E
AAcFAAAq!))+/2AGGIAqyy{ yy{QYY[8: AaDAq!))+!"45r5   r  r   s   `  r3   test_addz_TestCommon.test_addm  s&    	6$ %% 	E%L	r5   c                 B      fd} j                   D ]
  } ||        y )Nc                     j                   |    }j                  |    }|j                         }d|d<   |}||z   }t        |||j	                         z          y )Nr.  r  )r   r   r   r   r   r  s         r3   r   z$_TestCommon.test_radd.<locals>.check  sW    //%(C%%e,E
AAcFAAAq!aiik/2r5   r  r   s   `  r3   	test_raddz_TestCommon.test_radd  s&    	3 %% 	E%L	r5   c                 t      fd} j                   D ]#  }|t        j                  d      k(  r ||       % y )Nc                     j                   |    }j                  |    }t        ||z
  j                         t	        j
                  d             t        |dz
  j                         |       j                  t	        j                  g dg dg dgd            }t        ||z
  j                         ||j                         z
         t        ||z
  j                         |j                         |z
         t        ||d   z
  ||d   z
         y )Nr  r   r   r   r   rk  r  r   r   r   r   r  r   rZ  r   )r   r   r   r   rC   r   r   r   r8   r   r   rJ   r   s       r3   r   z#_TestCommon.test_sub.<locals>.check  s    //%(C%%e,E668"((6:JK	224c:,}EsKA 	224cAIIK6GHE	224aiikC6GH us1v~sSV|<r5   r   r   rC   r8   r   s   `  r3   test_subz_TestCommon.test_sub  s:    	=  %% 	E((%L	r5   c                 t      fd} j                   D ]#  }|t        j                  d      k(  r ||       % y )Nc                    j                   |    }j                  |    }t        ||z
  g dg dg dg       t        ||z
  g dg dg dg       t        d|z
  j                         |        j	                  t        g dg dg dgd            }t        ||z
  ||j                         z
         t        ||z
  |j                         |z
         t        |j                         |z
  |j                         |z
         t        ||j                         z
  ||j                         z
         t        |d   |z
  |d   |z
         y )Nr  r   r  r  r  r   )r   r   r   r   r   r(   r  s       r3   r   z$_TestCommon.test_rsub.<locals>.check  s   //%(C%%e,Eei	)-LMi	)-LME	224sd;vyJ&GLMAa#		*;<C!))+*;<qyy{U2AIIK#4EFuqyy{2C!))+4EF s1v~s1v|<r5   r   r  r   s   `  r3   	test_rsubz_TestCommon.test_rsub  s:    	=" %% 	E((%L	r5   c                 B      fd} j                   D ]
  } ||        y )Nc                 \   j                   |    }j                  |    }t        |dz   j                         |       t	        t        dd      D cg c]  }||z  	 c}      }t	        t        dd      D cg c]  }||z  	 c}      }t        |j                         |       y c c}w c c}w )Nr   r   r   )r   r   r   r   r  r   r   )r8   r   r   r  sumSsumDr   s         r3   r   z$_TestCommon.test_add0.<locals>.check  s    //%(C%%e,E 	224c:5A;7aE	78Dq!5AC56D5 85s   B$6B)r  r   s   `  r3   	test_add0z_TestCommon.test_add0  s&    		6 %% 	E%L	r5   c                 $   t        g dg dg      }t        g dg dg      }| j                  |      }| j                  |      }t        |j                  |      j	                         ||z         t        |j                  |      j	                         ||z         t        g dg dg      }t        g dg dg      }| j                  |      }| j                  |      }t        |j                  |      j	                         ||z         t        |j                  |      j	                         ||z         t        |j                  |      j	                         ||z         t        |j                  |      j	                         ||z         y )	N)rk  r   r  )r_   ri  rH  )r   r  r   )r   r\  r   y      ?       y              @y              y      @      y            @rH  y      @       @y      @      y             ?y              y             @r  )r   r   r   multiplyr   )	r   rJ   rK   r  Bspr  rw  CspDsps	            r3   test_elementwise_multiplyz%_TestCommon.test_elementwise_multiply  s9   78$%78$%nnQnnQCLL-5571=CLLO335qs; $^45$^45nnQnnQCLL-5571=CLLO335qs; 	CLL-5571=CLLO335qs;r5   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      }| j	                  |      }| j	                  |      }| j	                  |      }| j	                  |      }| j	                  |      }| j	                  |d         }| j	                  |	      }| j	                  |	d d dd f         }| j	                  |
      }|||||||||	|
|g}|||||||||g	}|D ]V  }|D ]O  }	 |j                         |j                         z  }|j                  |      }t        |j                         |       Q X |D ]`  }|D ]Y  }	 |j                         |z  }|j                  |      }t        |      rt        |j                         |       Nt        ||       [ b y # t        $ r t        t        |j                  |       Y w xY w# t        $ r Y t        $ r t        t        |j                  |       Y w xY w)Nrk  r   r  r   )r  r  r  r   r_   r   )r  r  r   )r\  r   r_   )r  r  r  r  r  r   r   N)r   rC   onesr8  r   r   r   r   r  r   r  r!   )r   rJ   rK   r  rw  Er  GHJKLr  r  EspFspHspHsppJspJsppKspr  
spmatricesr  r  
dense_multsp_mults                              r3   #test_elementwise_multiply_broadcastz/_TestCommon.test_elementwise_multiply_broadcast  so   1#JB4&M(O8*A3sA3- 78G,-GGFOCCA3%LQqE1Q%=/" nnQnnQnnQnnQnnQ~~ai(nnQ~~a!Dk*nnQq!Q1aAq!43S#tS$D
  	CA C!"qyy{!:J **Q-#GOO$5zBC	C  	=A =!"qJ **Q-G$'(9:F'<=	= " !*ajj!< ! ! !*ajj!<s*   %!H I$II	I6#I65I6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        |       | j                  t        g dg dg dgd            }dt         j                  t         j                  dgdt         j                  t        t         j                  gt         j                  dt         j                  d	gg}t        t        | j                  |z        |       t        g d
g dg      }t        g dg dg      }| j                  |      }| j                  |      }t        t        ||z        ||z         t        g dg dg      }t        g dg dg      }| j                  |      }| j                  |      }t        j                  d      5  t        t        ||z        ||z         d d d        t        d	dgdd	gg      }t        dd	gdd	gg      }| j                  |      }| j                  |      }t        j                  dd      5  t        t        j                  t        ||z              ||z         d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r  r  r  r         ?ri  g      ?r   r  r  r  r  r  )ri  r_   r   r  )r   r  r   r  )divide)r  r  )rC   r   r   r   r   r   r(   r   r   r   r  )r   r9  denomrJ   rK   r  r  s          r3   test_elementwise_dividez#_TestCommon.test_elementwise_divide  s@   rvvbffQ'rvva'VVAbffRVV,. 	74::

#:;XFvyJ&GLMrvvbffS)s266*VVD*, 	74::#56A $^45$^45nnQnnQGC#I.!4 78$%78$%nnQnnQ[[) 	:wsSy11q59	: Aa5!A- Aa5!A- nnQnnQ[[(; 	Drxxc	(:;QUC	D 	D	: 	:	D 	Ds   J?/K?KKc                    t        g dg dg dg dg      }| j                  |      }dD ]a  }||z  }t        j                  j	                  ||      }t        |j                         |       t        |j                  |j                         c dD ]  }t        t        |j                  |        | j                  |d dd d f         }t        t        |j                  d       y )	Nr   r   r_   r   )r   r   rk  r   )r   rH  r   r   )r   r  r  r  r   r   r_   r   )r  g@rt  r   r   )r   r   rC   r3  matrix_powerr   r   r   r8   r   r   __pow__r  )r   rJ   rK   exponentret_spret_nps         r3   test_powz_TestCommon.test_pow@  s    <|\JKNN1! 	5H[FYY++Ax8Fv~~/8v||4		5 * 	;H*aii:	; NN1RaRT7#iA.r5   c           	         | j                  t        g dg dg dg dg            }t        g d|z  t        g d|j	                                      t        g dg      }t        ||z  ||j	                         z         y )Nr   r   r   r   r   r   r_   r   r+  r_   r   r   r  )r   r(   r   r   r   r   )r   r4  rq  s      r3   test_rmatvecz_TestCommon.test_rmatvecR  s^    NN6779W"EFG!)a-Y		1LMYK !#'3+<=r5   c                 0   | j                  dgdgdgg      }t        t        |t        d      z               t	        |t        d      z  j                         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        dgdgdgg             t	        |t        j                  d      z  t        j                  d             y )Nr   r_   r   r  r   r   r   r   r   r   )r   r   r!   r   r   r   rC   r  r_  s     r3   test_small_multiplicationz%_TestCommon.test_small_multiplicationX  s    NNQCQC=)U1X&'a%(l++-aS1#?Qs^U9%56Qu%uqcA3_'=>Q(%!qcA3*@AQ("''&/:r5   c                    | j                  dgdgdgg      }t        |t              r_t        |t	        j
                  d      z  |       t        |t        dgg      z  |       t        |t	        j
                  d      z  |       y 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             y )Nr   r_   r   r  r  r  r  )r   rB   r#   r   rC   r  r   r   r_  s     r3   .test_start_vs_at_sign_for_sparray_and_spmatrixz:_TestCommon.test_start_vs_at_sign_for_sparray_and_spmatrixd  s    NNQCQC=)a!%a"''%.&8!<%a%!,&6:%a"''%.&8!<UA3Zy)9:UQC5\)51#sQC+ABRWWV_,bggfo>r5   c                 6   | j                  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        ||z  d       t        ||z  d       y )Nr   r_   r   r   r   )r   r   r   r   rJ   rK   s      r3   test_binop_custom_typez"_TestCommon.test_binop_custom_typeq  s    
 NNQC!qc?+MQU01QU01QU01QU12QU12QU12QU01QU12r5   c                 8   | j                  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        ||z  d       t        ||z  d       y )Nr   r_   r   r  r   r   )r   r   r   r  s      r3   !test_binop_custom_type_with_shapez-_TestCommon.test_binop_custom_type_with_shape  s    NNQC!qc?+"5)QU01QU01QU01QU12QU12QU12QU01QU12r5   c                      G d d      }d}| j                  dgdgdgg      } ||      }||z  }||z  }t        |j                         |j                                t        |j                  |j                         y )Nc                       e Zd Zd Zd Zy)0_TestCommon.test_mul_custom_type.<locals>.Customc                     || _         y r7   scalar)r   r  s     r3   r   z9_TestCommon.test_mul_custom_type.<locals>.Custom.__init__  s	    $r5   c                      || j                   z  S r7   r  r   s     r3   r   z9_TestCommon.test_mul_custom_type.<locals>.Custom.__rmul__  s    t{{**r5   N)r   r   r   r   r   rZ   r5   r3   Customr    s    %+r5   r  r_   r   r   )r   r<   r   r   ru  )r   r  r  rJ   rQ  A_scalarA_cs          r3   test_mul_custom_typez _TestCommon.test_mul_custom_type  ss    	+ 	+ NNQCQC=)6Nv:!e !1!1!3S[[]CX__cjj1r5   c                     | j                  dgdgdgg      }t               }t        ||k(  d       t        ||k7  d       t        ||kD  d       t        ||k\  d       t        ||k  d       t        ||k  d	       y )
Nr   r_   r   r   r   r   r   r   r   )r   r   r   r  s      r3   test_comparisons_custom_typez(_TestCommon.test_comparisons_custom_type  sx    NNQC!qc?+Q!VT"Q!VT"QUD!Q!VT"QUD!Q!VT"r5   c           	          | j                  t        g dg dg dg dg            }d}|j                  |      }||z  }t        |j	                         |j	                                y )Nr  r  r  r  rO   )r   r   r   r   r   )r   r4  r  actualr9  s        r3   test_dot_scalarz_TestCommon.test_dot_scalar  sS    NN5'')G!DEFvv:((*:*:*<=r5   c           	         | j                  t        g dg dg dg dg            }| j                  t        ddgddgddggd            }t        g d	g      j                  }t        j                  }t         |||      |j                         |z         t         |||      j                         ||z  j                                t         ||j                         |      ||z  j                                t         |||j                               ||z  j                                t        |t              st         |||      j                         ||z  j                                t         ||j                         |      ||z  j                                t         |||j                               ||z  j                                t        t        ||d       t        t        |d|       y )
Nr  r  r  r  r   r   r_   r   r  )r   r   r8  operatormatmulr   r   rB   r#   r   r   )r   r4  rK   rr  r  s        r3   test_matmulz_TestCommon.test_matmul  sv   NN5'')G!DEFNN51Q%1qe!4S9:WI  !&C.!))+2CD 	"&A,"6"6"81q5//:KL!&a"81q5//:KL!&AIIK"81q5//:KL!W%%fQl&:&:&<q1uoo>OP%fQYY[!&<q1uoo>OP%fQ		&<q1uoo>OP 	j&!Q/j&!Q/r5   c           
          | j                  t        g dg dg dg dg            }t        g dg      j                  }t	        ||z  |j                         |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                         y )Nr  r  r  r  r  )rk  r   r_   r   )rk  r   r  )r   r(   r   r8  r   r   r   r   r   rB   r
   rC   r   r   r   r   r'   )r   r4  rr  bad_vecsr9   s        r3   test_matvecz_TestCommon.test_matvec  s   NN6779W"EFGWI  !!c'199;+<= 	a%.(//5a%!aS!..55e<a&1#qc1#//66u= 	
1uW~-w78
1vg000"))<= 1Q%L%	"2EA3s)4D7OVaS!I%68 	4A*aii3	4
 	"!E'N"2C		G4LM!!aS!aSM/8C		G<T3U3W3WXr5   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      }| j                  |      }| j                  |      }t        ||z  j	                         ||z         t        ||z  ||z         t        ||z  ||z         t        ||z  ||z         |j                         }|}||z  }t        ||z  j	                         |       t        ||z  |       t        ||z  |       t        ||z  |       |j                         }t        ||z  j	                         |       t        ||z  |       t        ||z  |       t        ||z  |       |j                         }t        ||z  j	                         |       t        ||z  |       t        ||z  |       t        ||z  |       d	}	d
}
t        j                  d       t        |	df      }t        |	      D ]6  }t        d      D ]&  }t        j                         }||
k  s||
z  |||f<   ( 8 | j                  |      }||j                  z  }t        |j	                         |j	                         |j                  j	                         z         t        |j	                         |j	                         |j	                         j                  z         | j                  ddgddgg      }| j                  ddgddgddgg      }t        t        |j                  |       t!        |t"              rt        t        |j$                  |       y y )Nr  r  r  r  r   r   r_   r   r  g333333?r   rk  rH  r  )r(   r   r   r   r   rM  rN  rO  r   r]   r   r   r8  r   r   r   rB   r#   r   )r   rG   a2rL   aspbspcsprQ  wantr  fracrJ   r  r  r  rK   s                   r3   test_matmat_sparsez_TestCommon.test_matmat_sparse  s   GGIg67GGIg67QqE1Q%1&s+nnQnnQ!39"5"5"7Q?!#'1q51!!c'1q51!"s(AE2 iik1u!39"5"5"7>!#'40!!c'40!"s(D1iik!39"5"5"7>!#'40!!c'40!"s(D1iik!39"5"5"7>!#'40!!c'40!"s(D1 A1Q%Lq 	$A1X $MMOt8tVAacF$	$ NN1G!!))+qyy{QSS[[]/JK!!))+qyy{QYY[]]/JK NNQqE1Q%=)NNQqE1Q%1./j!,,2a!*aii3 "r5   c           	      P   t        g dg dg dg dg      }| j                  |      }t        ddgddgd	d
gg      t        ddgddgd	d
gg      g}|D ]Q  }||z  }t        t	        |t        |                   t        |j                  d       t        |t        ||             S y )Nr  r  r  r  r   r_   r   rk  rH  r  rk  r_   )	r(   r   r   r   rB   typer   r   r   )r   rG   r  bsrL   results         r3   test_matmat_densez_TestCommon.test_matmat_dense  s    GGIg67nnQ aUAa5!A'(&1Q%1qe1D*EF 	+A1WFJvtAw/0u-Qq*		+r5   c                     t        j                  g dg dg dgddgddgg      }|j                         }| j                  |      }dD ]  }|j	                  |      }t        |j                  |       t        |j                         |       | j                  |d	z         j	                  |      }t        |j                  |       t        |j                         |d	z           t        |d
z         |      }t        |j                  |       t        |j                         |        dD ]Q  }|j	                  |      }t        ||       | j                  |d	z         j	                  |      }t        ||d	z          S y )Nr~  r   r   rk  )rH  r   r   r   r_   r   r   )rl  rp  rk  rj  rs  r=   lil              @_matrix)r   dense)	ru   r   r   r   asformatr   ru  r   eval)r   rJ   rw  ru  rG   rL   rQ  s          r3   test_sparse_format_conversionsz*_TestCommon.test_sparse_format_conversions*  s@   KK1QqE1Q%=AIIKNN1A 	/F

6"A&)qyy{A.qt$--f5A&)qyy{AbD1(Vi'(+A&)qyy{A.	/ ) 	(F

6"Aq!$qt$--f5Aq!B$'	(r5   c           	         t        g dg dg dg      }t        g dg dg      }t        ||      }| j                  |      }dD ]B  }t        |d|z         }dD ],  }d	D ]%  }t	         |||f
      j                         |       ' . D y )Nr  r  r   r   rk  rH  r  r   r   rH  )rl  to)r   r_   r   r  )r   r_   r   rk  r  r  	blocksize)r   r   r   r   r   r   )	r   r9   r:   rJ   r  ru  fnXYs	            r3   
test_tobsrz_TestCommon.test_tobsrC  s    9Yy1277#$1InnQ 	DFdVm,B! D, DA q!f!5!=!=!?CDD	Dr5   c                      j                   }t        j                  g g      }||g fd} j                  d      }t	        t        j
                  |      j                         t        j
                  t        d                   t	        |j                  j                         t        d             t        t        |j
                  d        j                  D ]$  }t        t                    D ]  } |||        & y )Nc                    t        |   |       }j                  |      }|j                         }|j                         }t        |j	                         |       t        |j                         j	                         |       t        |j                  d      j	                         |       t        |j                  |j                         y )NrL  r  axes)r   r   r   r   r   r   r8   )r8   r  r   r   rG   rL   r  r   s         r3   r   z)_TestCommon.test_transpose.<locals>.checkT  s    51CNN3'E!AAqyy{A.q{{}446<uF;CCEqI!''*r5   r  rk  r   r   r  )r   rC   r   r   r   r   r   r   r8  r   r   r   r   r   )r   r  r  r   r  r8   r  r  s   `      @r3   test_transposez_TestCommon.test_transposeO  s    "5>
	+ v&2<<.668<<f6	8577??,eFm<j%//:(( 	 E3x=)  eQ 	 r5   c                 B      fd} j                   D ]
  } ||        y )Nc                     j                   |    }j                  |    }||z   }t        |||z          ||z   }t        |||z          y r7   )r   r   r   r8   r   r   sum1sum2r   s        r3   r   z)_TestCommon.test_add_dense.<locals>.checkl  sQ    //%(C%%e,E ;DtS3Y/3;DtS3Y/r5   r  r   s   `  r3   test_add_densez_TestCommon.test_add_densek  s&    	0 %% 	E%L	r5   c                 t      fd} j                   D ]#  }|t        j                  d      k(  r ||       % y )Nc                 "   j                   |    }j                  |    }|j                  t        k(  r)||z
  }t	        |||z
         ||z
  }t	        |||z
         y ||z   |z   |z
  }t	        |||z          ||z   |z   |z
  }t	        |||z          y r7   )r   r   r8   r   r   r#  s        r3   r   z)_TestCommon.test_sub_dense.<locals>.check{  s    //%(C%%e,E yyD U{"4s3s{"4s3 c	C50"4s3-4"4s3r5   r   r  r   s   `  r3   test_sub_densez_TestCommon.test_sub_densey  s:    	4$ %% 	E((%L	r5   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 ]m  }t         j                  t         j                  t         j
                  fD ]9  }d
D ]2  } |t        j                  |      t        j                  |      |       4 ; o y )N)r   r   r   )r   rk  rH  r]  )r   r   r_   )r   r   r  r  )r   y      @       @rH  )r                 ?y             c                    t        j                  | t         j                        r!j                  j	                  |             }n j                  
j	                  |             }|dk(  r|j                  d      }n^|dk(  r|j                  d      }nG|dk(  rj	                  |      }n0|dk(  r!j                  j	                  |            }n
t               t               5 }|j                  t        d       |j                  |      }|j                  |      }d d d        t        j                  t        |      t        |            }t        t              |       t        |j                  |j                         t        j                  t        |      t        |            }	t        t              |	       t        |j                  |	j                         y # 1 sw Y   xY w)Nr  r   scalar2r  r  ru   zHTaking maximum .minimum. with > 0 .< 0. number results to a dense matrix)rC   rf   complexfloatingr   rn   r  r   r   r  r"   maximumminimumr   r   r   r8   )r8   dtype2btyperJ   rK   r  max_smin_smax_dmin_dA_denseA_dense_cpxB_denser   s             r3   r   z/_TestCommon.test_maximum_minimum.<locals>.check  sm   }}UB$6$67NN;#5#5e#<=NN7>>%#89 KKN)#KKO'!NN6*("NN7>>&#9: l""$ %

278 		!		!% JJwqz71:6Ewu~u5ekk2JJwqz71:6Ewu~u5ekk2% %s   &9G""G+)r  r-  r  ru   )rC   r   r   r   r   rK  r8   )r   r   r8   r1  r2  r7  r8  r9  s   `    @@@r3   test_maximum_minimumz _TestCommon.test_maximum_minimum  s    ((Iy)<=((Iy*=>hh	<FG	3@ %% 	DE77BJJ> DE DE"((5/288F+;UCDD	Dr5   c                    | j                   }t        |j                         j                  |j                         t        |j	                  |d      j                  |j                         t        |j	                  |d      j                  |j                         t        |j                         j                         |j                                t        |j	                  |d      j                         |j                                t        |j	                  |d      j                         |j                                t        |d|j                  z         }t         |       |u        t         |d      |u        t         |d      j                  |j                         t         |d      j                         |j                                t        t        |j                         |              y )NTr  Fr  )	r   r   r   ru  	__class__r   r   r   rM   )r   rJ   toselfs      r3   	test_copyz_TestCommon.test_copy  sZ   JJ 	QVVX__ahh/Q[[[-44ahh?Q[[[.55qxx@QVVX%%'5Q[[[.668!))+FQ[[[/779199;G 4!((?+AE"a'(V&--qxx8V&..0!))+> 	+AFFHa889r5   c                     t        t        j                  d      j                  dd            }| j	                  |      }t        ||      D ]  \  }}t        |j                         |       ! y )N2   rH  rO   )r(   rC   r   r  r   zipr   r   )r   rK   rJ   r9   r:   s        r3   test_iteratorz_TestCommon.test_iterator  sX    299R=((B/0NN11I 	)DAqa(	)r5   c                 l   t        g       }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }t        j                  ddg      }| j	                  |      }| j	                  |      }	| j	                  |      }
| j	                  |      }| j	                  |      }| 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                  ||             t        |j                  |
      j                         t        j                  ||             t        |j                  |
      j                         t        j                  ||             t        |j                  |      j                         t        j                  ||             t        t        |j                  |       t        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                  ||             t        |j                  |      j                         t        j                  ||             t        |j                  d      j                         t        j                  |d             t        |	j                  d      j                         t        j                  |d             t        |j                  d      j                         t        j                  |d             t        t        |j                  |       t        t        |j                  |       t        |j                  |      j                         |j                  |             t        |	j                  |	      j                         |j                  |             t        |j                  |      j                         |j                  |             t        t        |j                  |       t        t        |	j                  |       y )Nr  r  r  r  r  rH  r  )r   r  rC   r  r   r   r   r   r   r   r  r   )r   r   rG   rL   rQ  r   rR  rS  r  r  r  dspespfsps                 r3    test_size_zero_matrix_arithmeticz,_TestCommon.test_size_zero_matrix_arithmetic  s    BiKKKKKKKKKKGGQFOnnQnnQnnQnnQnnQnnQ 	3773<//1266!Q<@3773<//1266!Q<@3773<//1266!Q<@3773<//1266!Q<@3773<//1266!Q<@3773<//1266!Q<@3773<//1266!Q<@3773<//1266!Q<@ 	j#''1-j#''1- 	3<<,446Aq8IJ3<<,446Aq8IJ3<<,446Aq8IJ3<<?224bkk!Q6GH3<<?224bkk!Q6GH3<<?224bkk!Q6GH3<<?224bkk!Q6GH3<<?224bkk!Q6GH3<<?224bkk!Q6GH 	j#,,2j#,,2 	3;;s+335qyy|D3;;s+335qyy|D3;;s+335qyy|D 	j#++s3j#++s3r5   c                    t        g       }|j                  d      }|j                  d      }|j                  d      }|||fD ]  }| j                  |      }t        |j	                         j                         |       t        |j                         j                         |       t        |j                         j                         |       t        |j                         j                         |       t        |j                         j                         |       t        |j                         j                         |        y )Nr  r  r  )r   r  r   r   rO  r   rN  rM  toliltodoktobsr)r   r   rG   rL   rQ  rT  spms          r3   test_size_zero_conversionsz&_TestCommon.test_size_zero_conversions  s    BiKKKKKKQ 	9A..#Csyy{224a8syy{224a8syy{224a8syy{224a8syy{224a8syy{224a8	9r5   c                 r     dd l t               }|j                  t               | fd       } |        y )Nr   c                     j                   j                         } t        j                        D ]G  }j	                  j                  | |            }t        | j                  |j                         t        | j                         |j                                t        | j                  |j                         | j                  j                         D ]  \  }}t        |t        j                        rt        ||j                  |          :t        |t               r9|r7t        |d   t        j                        rt        ||j                  |          t#        ||j                  |   k(          J y )N)protocolr   )r   r   r   HIGHEST_PROTOCOLloadsdumpsr   r   r   r   ru  r@   itemsrB   rC   r
   r  r   )r   rP  sploadedkeyr"  pickler   s        r3   r   z&_TestCommon.test_pickle.<locals>.check,  s   JJOO%E!&"9"9: ?!<<UX(NOU[[(..9"5==?H4D4D4FGU\\8??; !& 4 4 6 ?HC!#rzz2*30A0A#0FG$S%0S(Q<*30A0A#0FGx'8'8'= =>??r5   )rW  r   r  r"   )r   r  r   rW  s   `  @r3   test_picklez_TestCommon.test_pickle'  s4    !

*+		? 
	?( 	r5   c                 .      fd}dD ]
  } ||        y )Nc                    | dk(  rt        j                  d       j                  t        t        fv rt        j                  d       t        t        |       }j                  t        j                  d      j                  dd      dz        } ||j                               } ||      }t        |j                         |       y )Nsignz2sign conflicts with comparison op support on Numpyz%Unary ops not implemented for dok/lilr  rk  rH        4@)r   r   r   r   r   r   rC   r   r  r   r   )r   ufuncr  X0X2r   s        r3   r   z5_TestCommon.test_unary_ufunc_overrides.<locals>.checkD  s    v~ / 0~~*j!99CDB%Eryy}44Q:S@AAqyy{#BqBrzz|R0r5   )sintanarcsinarctansinhtanharcsinharctanhrintr[  expm1log1pdeg2radrad2degfloorceiltruncsqrtr^  rZ   )r   r   r   s   `  r3   test_unary_ufunc_overridesz&_TestCommon.test_unary_ufunc_overridesC  s"    	1 	D $K		r5   c                 (   t        j                  g dg dg dg      }| j                  |      }t        |j	                  d      d u        t        |j                         ddgddgddgg       |j	                  d	       t        |j                         ddgddgg       |j	                  d       t        |j                         ddgddgddgg       |j	                  d
       t        |j                         g dg dg dg       |j	                  d
       t        |j                         g dg dg dg       |j	                  dd       t        |j                         ddgddgddgg       dD ]  }t        t        |j                  |        y )Nr   r   r   rk  r_   r   r   r   r   r   r   r   r   r_   r   r   r_   r   r_   r_   r3  rC  )r_   r   r   r]  )r   )r  r_   r  r  	rC   r   r   r   resizer   r   r   r   )r   rw  rN  	bad_shapes       r3   test_resizez_TestCommon.test_resizeX  s   HHl""$ % NN1 D()199;!Q*+Q*+Q)1 	2 	
199;!Q*+Q)1 	2	199;!Q*+Q*+Q)1 	2 	
199;)2)2)4 	5 	
199;)2)2)4 	5
 	
A199;!Q*+Q*+Q)1 	2 : 	;I*ahh	:	;r5   c                 4   | j                   }|j                  }|j                  |d      }t        |j	                         |j	                                |t
        vrt        t        ||             |j                  ||j                  d      }t        |j	                         |j	                                |t
        vrt        t        ||             |j                  |t        j                  d      }t        |j	                         |j	                                |j                  |d      }t        |j	                         |j	                                t        t        ||              dD ]  }||k(  r	|j                  |      }|j                  |d      }t        |j	                         |j	                                |j                  |d      }t        |j	                         |j	                                t        t        ||               y )NFr  )r8   r   T)rj  rk  rp  rs  r=   r
  )r   ru  r<  r<   r   NON_ARRAY_BACKED_FORMATSr   rM   r8   rC   rI  r   r  )r   rJ   self_formatr  other_formatrK   s         r3   test_constructor1_basez"_TestCommon.test_constructor1_base|  s   JJhhKKK& aiik:66+Aq12KKuK5 aiik:66+Aq12KK%K8199;		4KKK% aiik:+Aq112F 		7L{*

<(AAE*A$QYY[!))+>AD)A$QYY[!))+>/1556		7r5   N)dr   r   r   __doc__r$   r   classmethodr   r   r   r  r  r$  r'  r-  r1  r6  r:  r?  rB  rE  rU  r`  rg  rn  rq  rx  r|  r  r  r  r   markslowr  r  r  r  r  r  r  r  r	  r  r  r  r  r"  r$  r&  r<  r@  r	  rF  rI  rK  rO  r\  r_  rw  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r&  r)  r:  r>  rB  rG  rM  rX  rq  r{  r  rZ   r5   r3   r   r     sm   @"K= =*	1#J%N=~<|8t8t@=
;
7$?JGF/
/
GB?*=X [[70 70rAB##OO! F
> 6(7 D
? 6(7A8$ Y Y 

 

 

 

 . ..'6R#6J &H &HP 9 9 		
,02<*5=n!DF/$>
;?3"32 #>0,Y<64p+(2
D 86)DV:0)84t98*";H7r5   r   c                   $    e Zd Zd Zd Zd Zd Zy)_TestInplaceArithmeticc                    t        j                  d      }| j                  |      }|j                         }|j                         }||z  }||z  }t	        ||       |j                         }|j                         }||z  }||z  }t	        ||       |j                         }|j                         }t        |t              r5t        t        t        j                  ||j                         ||z  }||z  }nJt        t        t        j                  ||       |j                  |j                        }||j                  z  }t	        ||       t        t        t        j                  ||       y )Nr  )rC   r  r   r   r   rB   r#   r   r   r  imulr8  r   r  	ifloordiv)r   rG   rL   r9   r:   s        r3   test_inplace_densez)_TestInplaceArithmetic.test_inplace_dense  s   GGFONN1FFHFFH	Q	Q1a FFHFFH	Q	Q1a FFHFFHa!*hmmQ<AAFA *hmmQ:acc
AHA1a  	i!3!3Q:r5   c                 B      fd} j                   D ]
  } ||        y )Nc                    j                   |    }j                  |    }t        j                  t        | d      rD|j                         }|dz  }|j                         }|dz  }t        ||j                                t        j                  t        | d      rE|j                         }|dz  }|j                         }|dz  }t        ||j                                y y N	same_kind)castingr_   r  	r   r   rC   can_castintr   r   r   r2  r8   r   r   rG   rL   r   s        r3   r   z6_TestInplaceArithmetic.test_imul_scalar.<locals>.check  s    //%(C%%e,E {{3{;JJLQHHJQ"1aiik2{{5%=JJLT	HHJT	"1aiik2 >r5   r  r   s   `  r3   test_imul_scalarz'_TestInplaceArithmetic.test_imul_scalar  s&    	3& %% 	E%L	r5   c                       fd} j                   D ]8  }t        j                  |t        j                  t                    r1 ||       : y )Nc                    j                   |    }j                  |    }t        j                  t        | d      rD|j                         }|dz  }|j                         }|dz  }t        ||j                                t        j                  t        | d      rE|j                         }|dz  }|j                         }|dz  }t        ||j                                y y r  r  r  s        r3   r   z6_TestInplaceArithmetic.test_idiv_scalar.<locals>.check  s    //%(C%%e,E{{3{;JJLQHHJQ"1aiik2{{5%=JJLT	HHJT	"1aiik2 >r5   )r   rC   r  r8   r  r   s   `  r3   test_idiv_scalarz'_TestInplaceArithmetic.test_idiv_scalar  s>    	3$ %% 	E ;;ubhhsm4e		r5   c                 H   | j                  t        j                  d            }| j                  t        j                  d            }| j                  t        j                  d            }||z  }||z   }t        |j	                         |j	                                ||z  }||z  }t        |j	                         |j	                                ||z  }||z
  }t        |j	                         |j	                                t        t        t        j                  ||       y )NrH  )	r   rC   r    r   r   r   r  r  r  )r   rG   rL   bps       r3   test_inplace_successz+_TestInplaceArithmetic.test_inplace_success  s     NN266!9%NN266!9%^^BFF1I&	Q!V		RZZ\2	Q!V		RZZ\2	Q!V		RZZ\2i!3!3Q:r5   N)r   r   r   r  r  r  r  rZ   r5   r3   r  r    s    ;@.2;r5   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)_TestGetSetc                 \      fd}t         D ]  } |t        j                  |              y )Nc                 l   t        g dg dg dg dg|       }j                  |      }|j                  \  }}t        | |      D ]*  }t        | |      D ]  }t	        |||f   |||f           , t	        t        |d         |        dD ]#  }t        t        t        f|j                  |       % y )NrC  rk  r   r   r   r_   r   r]  rL  r  r   r   r<  )rk  r   r  )rk  r  r  )
r   r   r   r   r   r  r   
IndexErrorr  __getitem__)	r8   rw  rJ   r4  r7  r  r  r  r   s	           r3   r   z*_TestGetSet.test_getelement.<locals>.check	  s    w  (-.A q!A''CAaA2q\ 1r1 1A 1Q31Q3011 afu-B Jz95q}}bIJr5   r$   rC   r8   r   s   `  r3   test_getelementz_TestGetSet.test_getelement	  s*    	J$ & 	#E"((5/"	#r5   c                 \      fd}t         D ]  } |t        j                  |              y )Nc                 |   j                  d|       }t               5 }|j                  t        d       | j	                  d      |d<   | j	                  d      |d<   | j	                  d      |d	<   | j	                  d
      |d<   | j	                  d      |d<   | j	                  d      |d<   | j	                  d      |d	<   d d d        | t
        j                  k7  r#t        |j                         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                        s8| t
        j                  k7  r$dD ]  }t        t         |j                  d|         y y y # 1 sw Y   xY w)Nr  rL  r  r   r  rS  r   r_   r   r  r.  r  r  r   r  r  r  r  rH  )r   rH  r   r  )r   r   rk  r   )r_   r   r  r   ))r   rk  )r  rk  r  r  r=  g     ^@r  )r  )r   r   r  r"   r  rC   bool_r   r   r   r  __setitem__r   r   rf   r.  r  )r8   rJ   r  r  r  r   s        r3   r   z*_TestGetSet.test_setelement.<locals>.check	  s   uE2A"$ (

+U  **Q-$**S/$**Q-$**S/$**Q-$ ::a=%**Q-$(  "IIK$$$ 8 Dj!--UCD uW~. Cj!--BC MM%););<RXX% FA!)Q]]E1EF & =;( (s   B#F22F;r  r   s   `  r3   test_setelementz_TestGetSet.test_setelement	  s+    "	FH & 	#E"((5/"	#r5   c                 h      fd} j                   D ]  } |t        j                  |              y )Nc                     j                  d|       }t               5 }|j                  t        d       d|d<   d d d        t	        |d   d       y # 1 sw Y   xY w)N)r   rO   rL  r  r   )r   r\  )r   r   r  r"   r   r8   rJ   r  r   s      r3   r   z9_TestGetSet.test_negative_index_assignment.<locals>.checkG	  s_    we4A"$ 

+U % 51% s   AAr  r   s   `  r3   test_negative_index_assignmentz*_TestGetSet.test_negative_index_assignmentD	  s/    	& %% 	#E"((5/"	#r5   c           	           d\   fd}dddt        d      dfdt        d      ft        d      t        d      ffD ]  \  }} |||d        y )	NrH  rO   c                    | d|d|}j                  f      }t               5 }|j                  t        d       d|| |f<   d d d        t	        |j                         ||       t	        || |f   d|       y # 1 sw Y   9xY w)Nz ; r  r   r  )r   r   r  r"   r   r  )	r  r  nitemsr/   rJ   r  rT  r  r   s	         r3   	_test_setz3_TestGetSet.test_scalar_assign_2.<locals>._test_setW	  s    EQEVJ/C1v&A"$ 

+U !Q$  =!Q$C8 s   A??Br_   r   r  r  r  r  r  r   )r   r   r  r  r  rT  r  s   `   @@r3   test_scalar_assign_2z _TestGetSet.test_scalar_assign_2T	  s_    1
	9 WhrB"eBiBir+- 	DAqaA	r5   c                     | j                  d      }t        j                  d      }t               5 }|j	                  t
        d       ||fD ]  }d|d<   d|d<   d|d<    	 d d d        t        |j                         |       y # 1 sw Y   $xY w)NrG  r  r   r  rk  r  r  r   rC   r   r   r  r"   r   r   r   rJ   rK   r  r  s        r3   test_index_scalar_assignz$_TestGetSet.test_index_scalar_assignh	  s    NN6"HHV  	CJJ'Q V ###	 	199;*	 	s   /BBN)r   r   r   r  r  r  r  r  rZ   r5   r3   r  r  	  s    #,&#P# (+r5   r  c                       e Zd Zd Zy)
_TestSolvec                    d}t         j                  j                  d       t        ||ft              }t         j                  j                  |      }t         j                  j                  |dz
        dt         j                  j                  |dz
        z  z   }t         j                  j                  |      }t        t        |            D ]  }||   |||f<    t        t        |            D ]%  }||   |||dz   f<   t        ||         ||dz   |f<   ' | j                  |      }t               5 }|j                  t        d       t        |      j                  |      }d d d        t        ||z  |       y # 1 sw Y   xY w)Nr  r   rL  r   r+  r/  )rC   r   r]   r   r  r  r   r   r   r   r   r  r"   r)   solver   )r   r  rJ   r9   r:   r  r  r  s           r3   
test_solvez_TestSolve.test_solvex	  sM    
		q1Q%w'IINN1IINN1Q3299>>!A##6 66IINN1s1v 	AqTAacF	s1v 	'AtAa!eH 1Aac!eH	' NN1  	!CJJ.?AQa A	! 	AE!$		! 	!s   51E>>FN)r   r   r   r  rZ   r5   r3   r  r  w	  s    %r5   r  c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)_TestSlicingc                 T   t        | j                  dt        j                        dddf   j                  t        j                         t        | j                  dt        j
                        dddf   j                  t        j
                         t        | j                  dt        j                        dddf   j                  t        j                         t        | j                  dt        j                        dddf   j                  t        j                         y )Nr   rO   rL  r   r   rH  )r   r   rC   rE  r8   rS   rI  r   r   s    r3   test_dtype_preservationz$_TestSlicing.test_dtype_preservation	  s    T^^F"((^;AacEBHH"((ST^^F"((^;AacEBHH"((ST^^F"**^=a!eDJJBJJWT^^F"**^=a!eDJJBJJWr5   c                    t         j                  t         j                  t         j                  t         j                  fD ]  }| j                  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                  |        y )Nrv  rL  r   r_   rC   rE  rS   rI  r   r   r   r8   r   dtrJ   s      r3   #test_dtype_preservation_empty_slicez0_TestSlicing.test_dtype_preservation_empty_slice	  s     88RXXrzz2::> 	0BvR0A1a!e8**B/1Qq5!8**B/1a!e8**B/1Qq5!8**B/	0r5   c           	      8   t        t        d      j                  dd            }| j                  |      }t	        |dd d f   |dd d f   j                                t	        |dddf   |dddf   j                                t        g dg dg dg d	g      }| j                  |      }t	        |ddd
f   |ddd
f   j                                t        g dg dg dg d	g      }| j                  |      }t	        |ddd
f   |ddd
f   j                                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       y )N      I@rH  rO   r   r_   r   r_   r   rk  r   r  r]  r  r   rk  r   r   r     r  r  )r'   r   r  r   r   r   r(   r   r  r  slicer   rK   rJ   r  rw  r  r  s          r3   test_get_horiz_slicez!_TestSlicing.test_get_horiz_slice	  sn   VC[((2./NN11QT7AadGOO$561Q!V9a1Q3i&7&7&9:Iy)Y?@NN11Q!V9a1Q3i&7&7&9: Iy)Y?@NN11Q!V9a1Q3i&7&7&9:1QV9a23i&7&7&9: 	j!--%+r1BCj!--!U1a[1ABr5   c           	         t        d      j                  dd      }| j                  |      }t        |dddgf   |dddf   j	                                t        |d d dgf   |d d df   j	                                t        g dg dg d	g d
g      }| j                  |      }t        |dddgf   |dddf   j	                                t        |d d dgf   |d d df   j	                                t        g dg dg d	g d
g      }| j                  |      }t        |d d dgf   |d d df   j	                                t        |dd dgf   |dd df   j	                                t        t        |j                  t        d       df       t        t        |j                  dt        dd      f       y )Nr  rH  rO   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  s          r3   test_get_vert_slicez _TestSlicing.test_get_vert_slice	  s   3K2&NN11QqS1#X;!A#q&	(9(9(;<1QV9a1goo&789iI>?NN11QqS1#X;!A#q&	(9(9(;<1QV9a1goo&78 9iI>?NN11QV9a1goo&781RS1#X;"#q&	(9(9(;< 	j!--%+r1BCj!--!U1a[1ABr5   c                 d   t        d      j                  dd      }| j                  |      }t        |ddddf   j	                         |ddddf          t        |dd d df   j	                         |dd d df          t        |d ddd f   j	                         |d ddd f          t        g d	g d
g dg dg      }| j                  |      }t        |ddddf   |ddddf   j	                                t        |d d dd f   |d d dd f   j	                                y )Nr  rH  rO   r_   r   r   r   r  r  r  r]  r  )r   r  r   r   r   r   )r   rK   rJ   r  r  s        r3   test_get_slicesz_TestSlicing.test_get_slices	  s4   3K2&NN11QqS!A#X;..0!AaC1H+>1QR"W:--/12ss7<1SbS!"W:--/3B37< 9iI>?NN11QqS!A#X;!A#qs((;(;(=>1QU8Qq!"uX%5%5%78r5   c                    t         j                  j                  dd      }	 | j                  |      ddddddf   }t        |j                         |ddddddf          y # t        $ r t        j                  d      w xY w)Nr@  r      r_   r  r   feature not implemented)	rC   r   r  r   r   r   r   r   r   )r   v0r  s      r3    test_non_unit_stride_2d_indexingz-_TestSlicing.test_non_unit_stride_2d_indexing	  s    YY^^B#	9r"1R61R6>2A
 	199;1R61R6>(:;	  	9++788	9s   A$ $Bc                    t        t        d      j                  dd            }| j                  |      }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   j                         |d	d d f          t	        |d	ddf   j                         |d	ddf          t	        |t        d	      ddf   j                         |d	ddf          t	        |d d d	f   j                         |d d d	f          t	        |d
ddf   j                         |d
ddf          t	        |dddf   j                         |dddf          t	        |d	dd
f   j                         |d	dd
f          t	        |d	dt        d
      f   j                         |d	dd
f          t	        |dd	dd	f   j                         |dd	dd	f          t	        |dd d
d f   j                         |dd d
d f          t	        |d dd df   j                         |d dd df          t	        |d	dd df   j                         |d	dd df          t	        |dd d f   j                         |dd d f          t	        |dd d f   j                         |dd d f          t	        |t        d      d d f   j                         |dd d f          t	        |dd j                         |dd        t	        |dd j                         |dd        t        t        d	      t        d      d       }t	        ||d d f   j                         |d	dd d f          t	        |d d |f   j                         |d d d	df          y )Nr@  rH  rO   r  r  r  r  r  r_   r   rk  r  r   rZ  )	r'   r   r  r   r   r   r   r  r   )r   rK   rJ   r  s       r3   test_slicing_2z_TestSlicing.test_slicing_2	  s   VBZ''"-.NN1 	QsVQsV$QtWag&QuXah'QuRy|_QuX.Qr%)|_QuX.QuRyr*+AeH5 	Qq!tW__&!Q$0Qq!B$wZ'')1Q"W:6QuQx2~&..0!AqtG*= 	Qq!tW__&!Q$0QqsAvY&&(!AaCF)4QqsBwZ'')1QqS"W:6QqtQwZ'')1QrT1W:6QqtU1X~&..0!AbD!G*= 	QqsAaCx[((*Aac1Q3hK8Qqr12vY&&(!ABF)4Qrr2A2vY&&(!BQBF)4QqtRaRx[((*AadBQBhK8 	Qq!tW__&!Q$0Qr1uX%%'2q52QuRy!|_,,."a%9 	QqV^^%q1v.QqW__&!B0 $q'$q'$'Qq!tW__&!A#q&	2Qq!tW__&!QqS&	2r5   c                    t        t        d      j                  dd            | j                        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 ](  \  }}}
|
dk(  r|	j                  t        |||
             * |	D ]  } |||        ||d        |d|        y )Nr@  rH  rO   r_   r   r   r  r  r  r  rk  r  r   rZ  ri  c                     |    }|    }|j                   dk(  rt        ||t        |              y |j                  dk(  r|j                  dk(  ry t	        |j                         |t        |              y NrZ   r   )r   r   rA  re   r   r   )rG   r9   r:   rJ   rK   s      r3   check_1z,_TestSlicing.test_slicing_3.<locals>.check_1
  s^    !A!Aww"}Q47+66Q;166Q;&qyy{AtAw?r5   c                    t        | t        j                        rt        |       }n| }t        |t        j                        rt        |      }n|}| |f   }||f   }|j                  dk(  rt        ||t        | |f             y |j                  dk(  r|j                  dk(  ry t        |j                         |t        | |f             y r  )
rB   rC   r
   r  r   r   rA  re   r   r   )rG   rL   aibir9   r:   rJ   rK   s         r3   check_2z,_TestSlicing.test_slicing_3.<locals>.check_2&
  s     !RZZ(V!RZZ(V!Q$A"b&	Aww"}Q4A<066Q;166Q;&qyy{AtQF|Dr5   )
Nr   r   r_   rH  r  r  r  rH  i)r'   r   r  r   rC   s_r   r   	enumerate	itertoolsproductrE   r  )r   r  slicesr  r  rG   r  r  rL   extra_slicesrQ  rJ   rK   s              @@r3   test_slicing_3z_TestSlicing.test_slicing_3
  s   VBZ''"-.NN1UURa&"Qq'2ab62add8R)R!WQqV*bBiEQrEQ1r!AwB)RWWR[	*		@ f% 	DAqAJ		E0 f% 	DAq!&) 11	
  (( -= ,>>?,@ B 	0GAq!AvaA/		0  	AAqMArNBN	r5   c                    t        t        d      j                  dd            }| j                  |      }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
          y )Nr@  rH  rO   .).)r   .).r   r   )r   r   .)r   .r   )r'   r   r  r   r   r   rJ   r   )r   rL   rG   s      r3   test_ellipsis_slicingz"_TestSlicing.test_ellipsis_slicingO
  s{   VBZ''"-.NN11S6>>+QsVXX61T7??,agii81V9,,.&	<1V9,,.&	<1QRW:--/12s7>1S!"W:--/37>1QRCZ=002Aab!SjMOOD1QQRZ=002AaabjMOODQy\1Y<0Qy\1Y<0r5   c                 ,   | j                  t        d      j                  dd            }t        j                  t
        d      5  |d    d d d        t        j                  t
        d      5  |d    d d d        y # 1 sw Y   3xY w# 1 sw Y   y xY w)Nr  r   r_   z(an index can only have a single ellipsismatch)..).r   .)r   r   r  r   r   r  r   rG   s     r3   test_multiple_ellipsis_slicingz+_TestSlicing.test_multiple_ellipsis_slicinga
  s    NN6!9,,Q23]]:!KM 	hK	 ]]:!KM 	kN	 		 		 	s   A>/B
>B
BN)r   r   r   r  r  r  r  r  r  r  r  r  r  rZ   r5   r3   r  r  	  s:    X0C(C*9	<+3Z@D1$r5   r  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
_TestSlicingAssignc                 b   | j                  d      }t        j                  d      }t               5 }|j	                  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<   4 	 d d d        t        |j                         |       y # 1 sw Y   $xY w)	NrG  r  r   r   rk  r   r  r  r  r  s        r3   test_slice_scalar_assignz+_TestSlicingAssign.test_slice_scalar_assignm
  s    NN6"HHV  
	 CJJ'Q V  !A#a%!A#a%!A#a%!AB$!%R%( 
	  	199;*
	  
	 s   A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 ]  \  }} |||        y )	Nr  c                 (   d| d|}j                  f      }t               5 }|j                  t        d       d|| |f<   d d d        t	        j
                  f      }d|| |f<   t        |j                         ||       y # 1 sw Y   DxY w)Nzi=z; j=r  r   r  )r   r   r  r"   rC   r   r   r   )	r  r  r/   rJ   r  rK   rT  r  r   s	         r3   r  z9_TestSlicingAssign.test_slice_assign_2.<locals>._test_set
  s    qe4u%C1v&A"$ 

+U !Q$ !Q AAadG%aiik1cB s   BBr_   r   rO   rk  rH  r  )r  r   r  s   `   @@r3   test_slice_assign_2z&_TestSlicingAssign.test_slice_assign_2}
  sl    1	C q]QdB(:$;aq"=NAha-/ 	DAqaO	r5   c                    | j                  d      }t               5 }|j                  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        y # 1 sw Y   y xY w)Nr  r  r_   r  r  r  r   r_   r   rO   r  r   r   r  )	r   r   r  r"   r   r   rC   r   r8  )r   rK   r  rJ   s       r3   test_self_self_assignmentz,_TestSlicingAssign.test_self_self_assignment
  sR    NN5!  	GCJJ'Q AcFAcFAcFAcFBAqsVAacFq1v~~/1Q31ABBArr"1"uXAacFrxx37EBA1vxxAcrc!eHq1v~~/111SbSU83C3C3EF)	G 	G 	Gs   D!EEc                    | j                  d      }t        g dg dg dg dg      }ddgddgg}t               5 }|j                  t        d	       d
|d<   d|d<   d|d<   ||z   |d d d d f<   t        |j                         |       t        t        |            |d dd df<   t        |j                         d dd df   |       d d d        y # 1 sw Y   y xY w)Nr  rO   r   r   )r   r   r  )r      r   r]  r   r   rk  r  rH  r  r   r  r  r  r_   )r   r   r   r  r"   r   r   r   )r   rK   r9  blockr  s        r3   test_slice_assignmentz(_TestSlicingAssign.test_slice_assignment
  s    NN5!(!"!# $ A!u  	;CJJ'Q AcFAcFAcFqSAacFqyy{H5!%,/Abqb!eHqyy{2A2rr62E:	; 	; 	;s   BCCc                 \   | j                  d      }t               5 }|j                  t        d       d|d<   d|d<   d|d<   d	|d
<   t	        t        j                  d            |d d d d d        t        g dg dg dg dg      }t        |j                         |       y # 1 sw Y   ;xY w)Nr  r  rH  r  r   r  r  r  rO   r  rC  r  r  r  )
r   r   r  r"   r   rC   r    r   r   r   )r   rK   r  r9  s       r3   "test_sparsity_modifying_assignmentz5_TestSlicingAssign.test_sparsity_modifying_assignment
  s    NN5!  		*CJJ'Q AcFAcFAcFAcFrvvay)AbqE		* '''(;<199;1		* 		*s   AB""B+c                 <   | j                  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 }|j                  t        d       t        |      D ]3  \  }}|||<   |||<   t        |j                         |t        |             5 t        |      D ]d  \  }}t        |      D ]Q  \  }}	d|z  d|dz   z  z   |||	f<   d|z  d|dz   z  z   |||	f<   t        |j                         |t        ||	f             S f t        ddd      |d
dddf<   t        ddd      |d
dddf<   t        |j                         |       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        |j                         |       d d d        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|j+                                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       y # 1 sw Y   xY w)Nr  r_   r   r   r  r  rk  r  rH  r   rZ  ri  r  rO     r  d   r  r	  r  )rk  r   r   r   r_   rk  )r   r   r   rj  )r   r   r   r2  rC   r  r   r   r  r"   r  r   r   rA  r   r   r   r   r  listr  r   )
r   rJ   rK   r  r  r  r  rG   r  rL   s
             r3   test_set_slicez!_TestSlicingAssign.test_set_slice
  sc   NN6"%'(UURa&"Qq'2ab62add8QqV*bBiEQrEQ1r!AwB)RWWR[*
   	/CJJ'Q "&) <1!!"199;47;<
 "&) E1%f- EDAqTD!A#J.AacFTD!A#J.AacF&qyy{AtQF|DEE !B?Aa2aiL B?Aa2aiLqyy{A.))Aq!,QW5Aa!eQhK))Aq!,Q/Aa!eQhKqyy{A.+	/0 	j!--eCj9IJj!--Ej!--!U4[1A5:&	(j!--%+q1A5:&	(j!--%+q1A1668Lj!--!9-y9<	Ij!--!9i8!9-/09	; 	j!--%(A1v1v&	(I	/ 	/s   E0NNc                     | j                  t        j                  d            }| j                  d      }||dd df<   t        |j	                         g dg dg       y )Nr  r  r   r_   r   r   r   r  )r   rC   r  r   r   r  s      r3   test_assign_emptyz$_TestSlicingAssign.test_assign_empty  sL    NN2776?+NN6"!RaR%199;I(>?r5   c                     | j                  t        j                  d            }t        j                  d      }||d d df<   ||dd d f<   t	        |j                         g dg dg dg       y )Nr3  r   r   r   r  r]  )r   rC   r  r   r   r   r   rJ   r9   s      r3   test_assign_1d_slicez'_TestSlicingAssign.test_assign_1d_slice  sV    NN2776?+HHQK!Q$!Q$199;Iy(IJr5   N)r   r   r   r  r  r  r  r	  r  r  r  rZ   r5   r3   r  r  l
  s.    + (G4;,2 .(`@Kr5   r  c                   R    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 Zy)_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 ]  }| j                  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                  |        y )Nrv  rL  F)FFFr  r  s      r3   #test_dtype_preservation_empty_indexz6_TestFancyIndexing.test_dtype_preservation_empty_index  s     88RXXrzz2::> 	-BvR0A1uen,-33R80!34::B?1b5,2q5,	-r5   c                 6   | j                  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       y )NrH  foor_   r  r  r  )r   rC   r   r   r  r   r  r  r_  s     r3   test_bad_indexz!_TestFancyIndexing.test_bad_index  sh    NN288QF+,z:y91==%Pz:y91==*Uz:. ,/	1r5   c           
         t        t        d      j                  dd            }| j                  |      }t	        |ddg   j                         |ddg          t	        |dddgf   j                         |dddgf          t	        |dddgf   j                         |dddgf          t	        |t        d      ddgf   j                         |dddgf          t	        |dt        ddg      f   j                         |dddgf          t	        |t        d      t        ddg      f   j                         |dddgf          t	        |d d g d	f   j                         |d d g d	f          t	        |dd
dgf   j                         |dd
dgf          t	        |dd
ddgf   j                         |dd
ddgf          t	        |dd
t        ddg      f   j                         |dd
ddgf          t	        |ddgdf   j                         |ddgdf          t	        |ddgdf   j                         |ddgdf          t	        |t        ddg      df   j                         |ddgdf          t	        |ddgt        d      f   j                         |ddgdf          t	        |t        ddg      t        d      f   j                         |ddgdf          t	        |ddgd d f   j                         |ddgd d f          t	        |ddgddf   j                         |ddgddf          t	        |t        ddg      ddf   j                         |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   j                         |dgdggdd
gf          t	        |dgdgdggddgf   j                         |dgdgdggddgf          t	        |t        dgdgdgg      ddgf   j                         |dgdgdggddgf          t	        |dgdgdggt        ddg      f   j                         |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   j                         |dgdgdggddgf          t	        |ddg   j                         |ddg          t	        |ddg   j                         |ddg          t	        |t        ddg         j                         |ddg          t	        |ddgd d f   d d dd
gf   j                         |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   j                         |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   j                         |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   j                         |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   j                         |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   j                         |d d ddgf   ddgd d f          t        t        d      t        d
      d       }t	        ||d d f   j                         |dd
d d f          t	        |d d |f   j                         |d d dd
f          t        j                  dggt              }t	        |||f   j                         |||f          t	        |g gg gf   j                         |g gg gf          y )Nr@  rH  rO   r   r   r  r_   rZ  )r_   r  r   r  rk  r  r\  r  ri  r  rL  )r'   r   r  r   r   r   r   r  r   rC   r  )r   rK   rJ   r  r  s        r3   test_fancy_indexingz&_TestFancyIndexing.test_fancy_indexing%  sD	   VBZ''"-.NN1 	Q1vY&&(!QF)4 	Qq1a&y\))+Qq1a&y\:QrAr7{^++-qaW~>QuRy1b')*224aQGnEQr5!R>)*224aQGnEQuRy%B.0199;QrAr7{^L 	Qq-'(002Aa6F4GHQqsQCx[((*AacA3hK8QqsRH}%--/1Q3R=1ABQqsE2r(O+,446!A#Bx-8HI 	Q1vqy\))+Q1vqy\:Q2w{^++-q!R"~>QuaW~r)*224aBnEQ2wb	)*224aBnEQuaW~uRy0199;Q2w{^L 	Q1vqy\))+Q1vqy\:Q2w"}%--/Ar7AbD=1ABQuaW~qt+,4461b'1R4-8HI 	WQ1v1v~./Aq6Aq6>1BCWQBx!R012Ar2hB6G4HIAeRHo2w./0!RHq"g4E2F	
 	Ar2hq"g./0!RHq"g4E2F	
 	AeRHouaW~567B8aW;L9M	

 	QaSzAq6)*224a!qc
QF8J6KLtbTB4 1b')*224tbTB4 1b')*	
 	ebTB4"&'!R0199;tbTB4 1b')*	
 	tbTB4 %B.0199;tbTB4 1b')*	
 	ebTB4"&'2w78@@BtbTB4 1b')*	
 	Q1vY&&(!QF)4QBx[((*Ar2hK8Qub"X'//11b"X;? 	q!faiLQF#++-q!Q|A1vI/F	
 	r2hkN1q"g:&..0!RHaK.QG2L	
 	eRHoq !!UAr7^"34<<>r2hkN1q"g:&	
 	a!QiL!Q#++-qQF|QFAI/F	
 	a"bkNAr7A:&..0!ABxK.!R!2L	
 	aBx !%B.!"34<<>a"bkNAr7A:&	
 $q'$q'$'Qq!tW__&!A#q&	2Qq!tW__&!QqS&	2 HHqcU#&Qq!tW__&!Q$0 	QtbTz]**,ard
m<r5   c                 z   t         j                  j                  d       d}d}d}t        t         j                  j	                  ||            }t        j
                  ||dkD        }t         j                  j                  | dz   ||      }t         j                  j                  | dz   ||      }| j                  |      }|||f   }t        |      r|j                         }t        ||||f          ||z   }	||z
  }
t        t        |j                  |	|f       t        t        |j                  ||
f       y )Nr\   r@  r  rk  r  r   r  )rC   r   r]   r'   r  r  ra   r   r!   r   r   r   r  r  )r   NUM_SAMPLESr4  r7  rw  Ir  rN  SIJI_badJ_bads              r3   test_fancy_indexing_randomizedz1_TestFancyIndexing.test_fancy_indexing_randomized  s	   
		tRYY^^Aa()KK1s7#IIqb1fak:IIqb1fak:NN1!fC=++-CS!AaC&!AAj!--%;j!--!E;r5   c                    d\  }}t        t        ||z        j                  ||            }| j                  |      }t	        j
                  |dz   t              }t	        j
                  |dz
  t              }t	        j
                  |dz   t              }t	        j
                  |dz
  t              }t        j                  t        d|dz    d|       5  ||d d f   }	d d d        t        j                  t        d|dz
   d|       5  ||d d f   }	d d d        t        j                  ||t        d       f||t        d       f      D ]Q  \  }
}t        |
t              rt        |t              r't        j                  t        d      5  ||
|f   }	d d d        S y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   vxY w)	Nr  r   rL  r_   z(boolean row index has incorrect length: z instead of r  z&boolean \w+ index has incorrect length)r'   r   r  r   rC   r  r   r   r   r  r  r  r  rB   )r   r4  r7  rK   rJ   row_long	row_shortcol_long	col_shortr   r  r  s               r3   test_missized_maskingz(_TestFancyIndexing.test_missized_masking  s   1VAE]**1a01NN1 771q5-GGAE.	771q5-GGAE.	]]=a!eWLQRPST
 	 (A+A		
 ]]=a!eWLQRPST
 	  )Q,A		  %%y%+.y%+.
 
	DAq !U#
1e(<?  adG	 
		 	
	  	  s$   
F%
F1F=%F.1F:=G	c                 :   t         j                  j                  d       t        t	        d      j                  dd            }| j                  |      }t        j                  t         j                  j                  ddd      t              }t        j                  t         j                  j                  ddd      t              }t        j                  t         j                  j                  ddd	      t              }t        t        ||         ||          t        t        |d d |f         |d d |f          t        t        ||         ||          t        t        ||d
kD           ||d
kD            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                  |       t        t        |j                  |       t        t        |j                  |       t        t        t         f|j                  |df       y )Nr\   r@  rH  rO   r   r_   r  rL  r  r  )TFTTF)
FTTFTFFFFF)r  r  Tr  )r  r   r   )rC   r   r]   r'   r   r  r   r   ra   r   r   r   r   r   r  r  r   )	r   rK   rJ   r"  r  r  Z1Z2Z3s	            r3   test_fancy_indexing_booleanz._TestFancyIndexing.test_fancy_indexing_boolean  s   
		tVBZ''"-.NN1HHRYY&&q!!&4DAHHRYY&&q!"&5TBHHRYY&&q!'&:$GWQqT]AaD)WQq!tW%qAw/WQqT]AaD)WQq1uX&!a%1HH56HH 9 : 	WQq!tW%qAw/XXgT*XXgT*4XXgT*4j!--4j!--4j!--4z:.1vFr5   c                 z   t         j                  j                  d       t        t	        d      j                  dd            }| j                  |      }t        j                  t         j                  j                  ddd      t        	      }t        |      }t        t        ||         ||          t        t        ||d
kD           ||d
kD            t        j                  t         j                  j                  ddd      t        	      }t        j                  t         j                  j                  ddd      t        	      }t        |      }t        |      }t        t        |j                  |       t        t        |j                  |       t        t        t         f|j                  |df       y )Nr\   r@  rH  rO   r   r_   r  r  rL  r  )rH  r  )r  rO   r   )rC   r   r]   r'   r   r  r   r   ra   r   r   r   r   r   r  r  r   )	r   rK   rJ   r  XspZr  ZspYsps	            r3   "test_fancy_indexing_sparse_booleanz5_TestFancyIndexing.test_fancy_indexing_sparse_boolean  s6   
		tVBZ''"-.NN1HHRYY&&q!'&:$GmWQsV_ad+WQq1uX&!a%1HHRYY&&q!'&:$GHHRYY&&q!'&:$Gmmj!--5j!--5z:.QxHr5   c                     | j                  t        g dg dg dg            }t        j                  |j	                  d            dkD  }t        |d d |f   j                         ddgddgddgg       y )NrC  r  r   r   )r   r   rC   ravelr  r   r   )r   r   desired_colss      r3   #test_fancy_indexing_regression_3087z6_TestFancyIndexing.test_fancy_indexing_regression_3087  sf    nnUIw#@ABxx
+a/SL)113q!fq!fq!f5MNr5   c           	          | j                  t        ddgddgg            }t        t        |j                  dt        j                  ddg             y )Nr   r   r  r_   )r   r   r   r   r  rC   r   s     r3   test_fancy_indexing_seq_assignz1_TestFancyIndexing.test_fancy_indexing_seq_assign  s@    nnUQFQF#345j#//6288QqE?Kr5   c                    | j                  t        ddgddgg            }t               5 }|j                  t        d       |ddgddgf   |ddgddgf<   d d d        t        t        |      t        ddgddgg             y # 1 sw Y   .xY w)Nr   r   r_   r   zChanging the sparsity structure)r   r   r   r  r"   r   r   )r   r   r  s      r3   test_fancy_indexing_2d_assignz0_TestFancyIndexing.test_fancy_indexing_2d_assign  s    nnUQFQF#345  	6CJJ.8:"%q!fq!fn"5CAA	6 	WS\51a&1a&)9#:;		6 	6s   +BBc                 n   t        t        d      j                  dd            }d|dd d f<   d|d d df<   d|d<   | j                  |      }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          y )Nr@  rH  rO   r   r   r_   r   r  FFFFFrL  r   r   r_   r   rk  	r'   r   r  r   rC   r   r   r   r  r   rK   rJ   r  r  s        r3   test_fancy_indexing_emptyz,_TestFancyIndexing.test_fancy_indexing_empty  s   VBZ''"-.!A#!A##NN1HH89WQqT]AaD)HHRs#WQqT]AaD)WQq!tW%qAw/HH_C048WQq!tW%qAw/WQq!tW%qAw/r5   N)r   r   r   r  r  r  r  r&  r,  r1  r7  r;  r=  r?  rF  rZ   r5   r3   r  r    sF    -1h=T<4!FG@I.O
L<0r5   r  c              #      K   t        | d      r| j                  sd yd | j                  j                         }d| _        | j	                          t        || j                  d       yw)zIChecks that sorted indices property is retained through an operation
    has_sorted_indicesNFz'Expected sorted indices, found unsorted)ry  rH  rm  r   sort_indicesr   )r  rm  s     r3   check_remains_sortedrJ  &  sZ      1*+13G3G	iinnG ANNw		@Bs   A+A-c                   *    e Zd Zd Zd Zd Zd Zd Zy)_TestFancyIndexingAssignc                     | j                  t        j                  ddg            }t        t        t
        t        f|j                  dd       t        t        t
        t        f|j                  dd       y )NrH  r  r_   r  )r   rC   r   r   r  r   r  r  r_  s     r3   test_bad_index_assignz._TestFancyIndexingAssign.test_bad_index_assign6  sQ    NN288QF+,z:y91==%QRSz:y91==*VWXr5   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 ]  \  }} |||        y )Nr  c                 f   j                  f      }t        t        j                  f            }t	               5 }|j                  t        d       d|| |f<   t        |      5  d|| |f<   d d d        d d d        t        |j                         |       y # 1 sw Y   ,xY w# 1 sw Y   0xY wNr  r   )
r   r'   rC   r   r   r  r"   rJ  r   r   )r  r  rJ   rK   r  rT  r  r   s        r3   _test_set_slicezI_TestFancyIndexingAssign.test_fancy_indexing_set.<locals>._test_set_slice>  s    1v&A1a&)*A"$  

+U !Q$)!,  AadG   &aiik15      s#   )B'(B0B'B$	 B''B0rj  rO   rk  r   rH  r  r_   )r	  r  )r  rC   r   r   rR  r  r  rT  r  s   `   @@r3   test_fancy_indexing_setz0_TestFancyIndexingAssign.test_fancy_indexing_set;  s    1	6  tR!34iilE!RL1Aqk5B<02 	"DAq Aq!	" iilBIIaL13IJ 	"DAqAq!	"r5   c                 \      fd}t         D ]  } |t        j                  |              y )Nc                 R   j                  d|       }t               5 }|j                  t        d       | j	                  d      |ddgddgf<   t        |j                         | j	                  d      dz         | j	                  d      |ddddf<   t        |j                         | j	                  d      dz         | j	                  d      |d	<   t        |j                         | j	                  d      dz  | j	                  d      z          d d d        y # 1 sw Y   y xY w)
NrG  rL  r  r   r   r_   r-  rk  rw  )r   r   r  r"   r  r   r  r  s      r3   r   zD_TestFancyIndexingAssign.test_fancy_assignment_dtypes.<locals>.checkS  s    vU3A"$ 
G

+U "'A1Q%1+QUUWejjmAo6"ZZ_!A#ac'
QUUWejjmAo6C#QUUWejjmAo

1&EF
G 
G 
Gs   C5DD&r  r   s   `  r3   test_fancy_assignment_dtypesz5_TestFancyIndexingAssign.test_fancy_assignment_dtypesR  s*    	G & 	#E"((5/"	#r5   c                    | j                  d      }| j                  t        dd            }g d}d}t        |      }t               5 }|j	                  t
        d       t        |      5  ||df   j                  |d|f<   ||df   j                  |d|f<   ||df   j                  |d|f<   d d d        t        |j                         |j                  j                                | j                  d	      }t        |      5  d
dg|dddf<   d d d        t        |j                         g dg dg       | j                  d      }t        |      5  d
gdgg|dddf<   d d d        t        |j                         ddgdd
gddgg       | j                  d      }t        t        j                  d            }t        |      5  ||fD ]  }g d|g dg df<    	 d d d        t        |j                         |       | j                  d      }t        |      5  g d|d<   d d d        t        |j                         d       t        t        j                  d            }g d|d<   t        |j                         |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   IxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r   rk  r  r  r   r   r_   r  rO   r  r]  )r   rO   r  rv  r3  r  r  )r  r  r  )r   r    r   r   r  r"   rJ  r8  r   r   r'   rC   r   r   r  )r   rJ   rK   i0i1i2r  r  s           r3   test_sequence_assignmentz1_TestFancyIndexingAssign.test_sequence_assignmentd  s   NN5!NN3q8$2Y  &	/CJJ'Q &a( $BqD'))!B$BqD'))!B$BqD'))!B$$ qyy{ACCKKM: u%A%a( #r7!AaC%#qyy{Y,DE u%A%a( 'D";!A#a%'qyy{aVaWq"g,FG u%A%)A%a( 2Q 2A*1Agw&'22 qyy{A. v&A%a( 4*3&'4+&)*A&/A"#qyy{A.M&	/ &	/
$ $# #' '2 24 4C&	/ &	/s   "K*AJ-AKJAKJ(!A%KJ5>KK$A!KJ	KJ%	 K(J2	-K5J>	:KK
	KKc                 X   t        t        d      j                  dd            }d|dd d f<   d|d d df<   d|d<   | j                  |      }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        |      |       y )Nr@  rH  rO   r   r   r_   rA  rB  *   rL  rC  rD  rE  s        r3   test_fancy_assign_emptyz0_TestFancyIndexingAssign.test_fancy_assign_empty  s   VBZ''"-.!A#!A##NN1HH89!WQZ#HHRs#!WQZ#!A#WQZ#HH_C048!A#WQZ#!A#WQZ#r5   N)r   r   r   rN  rT  rW  r\  r_  rZ   r5   r3   rL  rL  5  s    Y
".#$./`$r5   rL  c                       e Zd Zd Zy)_TestFancyMultidimc           
      V   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 ]&  \  }}t         j                  j                  d	       t	        t         j                  j                  d
d            }| j                  |      }|||f   }t        |      r|j                         }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       ) y )Nr   r_   r   r   rk  r_   r  rk  rH  r  r   r_   r   r   r\   rH  r  )rC   r   r   r]   r'   r  r   r!   r   r   r   r  r  r  )	r   setsr"  r  rw  rN  r#  r$  r%  s	            r3   test_fancy_indexing_ndarrayz._TestFancyMultidim.test_fancy_indexing_ndarray  s   XXsQC!o&(;<XXsQC!o&)(=>XXyk"BHHqcA3_$=>XXi "((QC!qc?";<XXy),-XXy),-/  	LDAqIINN4 1-.Aq!AAaC&C}kkma!f%EEEE*ammeAY?*ammaY? *ammq!feDk5JK*ammeDkAq65JK%	Lr5   N)r   r   r   rg  rZ   r5   r3   ra  ra    s    Lr5   ra  c                   $    e Zd Zd Zd Zd Zd Zy)_TestFancyMultidimAssignc                    t         j                  j                  d       t        t         j                  j	                  dd            }| j                  |      }t         j                  j	                  dd      }t        j                  g dg dg      }t        j                  g dg d	g      }t        |      5  ||||f<   d d d        ||||f<   t        |j                         |       |dz   }|dz   }g d}t        |      5  ||||f<   d d d        ||||f<   t        |j                         |       t        |      5  d|||f<   d d d        d|||f<   t        |j                         |       t        t        |j                  ||f|       t        t        |j                  ||f|       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w
Nr\   rH  r  r_   r   r  rc  rd  re  )rC   r   r]   r'   r  r   r   rJ  r   r   r   r  r  )	r   rw  rN  r  r"  r  r$  r%  r  s	            r3   test_fancy_assign_ndarrayz2_TestFancyMultidimAssign.test_fancy_assign_ndarray  s   
		tRYY^^Aq)*NN1IINN1a HHi+,HHi+,!!$ 	AacF	!A#QYY[!$AA!!$ 	AacF	!A#QYY[!$!!$ 	AacF	!A#QYY[!$j!--%A>j!--!EA>+	 		 	
	 	s$   ;F/F;G/F8;GG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 ]  \  }} |||        y )Nr  c                 f   j                  f      }t        |      5  t               5 }|j                  t        d       d|| |f<   d d d        d d d        t        t        j                  f            }d|| |f<   t        |j                         |       y # 1 sw Y   SxY w# 1 sw Y   WxY wrQ  )
r   rJ  r   r  r"   r'   rC   r   r   r   )r  r  rJ   r  rK   rT  r  r   s        r3   rR  zR_TestFancyMultidimAssign.test_fancy_indexing_multidim_set.<locals>._test_set_slice  s    1v&A%a( *;*= 

+U !Q$  1a&)*AAadG%aiik15   s"   B'B	B'B$	 B''B0r   r_   r   r   rk  r  r   r_   rk  )r   rk  r   )rk  r   r_   )rC   r   rS  s   `   @@r3    test_fancy_indexing_multidim_setz9_TestFancyMultidimAssign.test_fancy_indexing_multidim_set  s    1
	6 hhAA/01a&91a&)QFQF+;<#Y/)Y1GHJ 	"DAq Aq!	"r5   c           	      :   t         j                  j                  d       t        t         j                  j	                  dd            }| j                  |      }t         j                  j	                  dd      }g dg dg}g dg d	g}||||f<   ||||f<   t        |j                         |       |D cg c]  }|D cg c]  }|dz   	 c} }}}|D 	
cg c]  }	|	D 
cg c]  }
|
dz   	 c}
 }}	}
g d}||||f<   ||||f<   t        |j                         |       d|||f<   d|||f<   t        |j                         |       t        t        |j                  ||f|       t        t        |j                  ||f|       y c c}w c c}}w c c}
w c c}
}	w rk  )rC   r   r]   r'   r  r   r   r   r   r  r  )r   rw  rN  r  r"  r  r  iir$  r  jjr%  r  s                r3   test_fancy_assign_listz/_TestFancyMultidimAssign.test_fancy_assign_list  sb   
		tRYY^^Aq)*NN1IINN1a 	"	"!A#!A#QYY[!$/01!1%R"q&%11/01!1%R"q&%11!A#!A#QYY[!$!A#!A#QYY[!$j!--%A>j!--!EA> &1%1s0   7	F FF	F"F.FFFc                    t         j                  j                  d       t        t         j                  j	                  dd            }| j                  |      }g d}g d}|D cg c]  }|dz   	 }}|D cg c]  }|dz   	 }}g d}	t        j                  d      d d d f   }
t        t        |j                  |t        d       f|	       t        t        |j                  t        d       |f|
       y c c}w c c}w )Nr\   rH  r  )r   r_   r   r   rk  r_   )rH  r  r   r_   r   r   )r   r_   r   rk  rH  r  r  )rC   r   r]   r'   r  r   r   r   r  r  r  )r   rw  rN  r"  r  rr  r$  rs  r%  C1C2s              r3   test_fancy_assign_slicez0_TestFancyMultidimAssign.test_fancy_assign_slice"  s    
		tRYY^^Aq)*NN1"#$Ba$$"#$Ba$$"YYq\!T'"j!--%t1ErJj!--%+u1ErJ %$s   &C58C:N)r   r   r   rl  rp  rt  rx  rZ   r5   r3   ri  ri    s    ?B"(?:Kr5   ri  c                   "    e Zd ZdZd Zd Zd Zy)_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  j                  d      d| j                  z         t	        | j                  j                  dz  j                  d      d| j                  j                  z         t	        | j                  j                  dz  j                  d      d| j                  j                  z         | j                  | j                        | _        | j                  | j                        | _	        y )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   rZ  g      @)g     ,@g      r   r   r}  r   )r   g      @r   r   r   r   )g     2@      r   r   r   r   rK  )g      ?r   r   r   r  g      )r|       @r   r   r   g      @)r   r  r   r   r   r   )r~  r   r   r   r   r      rS   )
r   _TestArithmetic__A_TestArithmetic__Br{  r   rn   ru  r   _TestArithmetic__Asp_TestArithmetic__Bspr   s    r3   __arith_initz_TestArithmetic.__arith_init8  s!   49302 4=> 39/57 9EF 9;579 ;DE 	DHHRK//8DHHEDHHMM",44W=b>NODHHMM",44W=b>NO^^DHH-
^^DHH-
r5   c                    | j                          t        | j                  | j                  z   j	                         | j
                  | j                  z          t        D ]  }t        j                  d      5  | j
                  j                  |      }d d d        | j                        }t        D ]w  }t        j                  |t        j                        sEt        j                  d      5  | j                  j                  j                  |      }d d d        n| j                  j                  |      }| j                        }||z   }||z   }t        |j                   |j                          t        |j	                         |       t        ||z   |       t        ||z   |       t        j                   d      ||fv r||z
  }||z
  }t        |j                   |j                          t        |j	                         |       t        ||z
  |       t        ||z
  |       z  y # 1 sw Y   xY w# 1 sw Y   xY w)Nr  r  r   )_TestArithmetic__arith_initr   r  r  r   r  r  r$   rC   r  rn   r   rf   r.  ru  r   r8   	r   r9   rJ   r  r:   rK   r  D1S1s	            r3   test_add_subz_TestArithmetic.test_add_subO  s    	ZZ$**$--/DHH1D	

 "  	/AX. 'HHOOA&'..#C% /}}Q(:(:;X6 4 HHMM0034 4 *AnnQ' U3YRXXbhh/"2::<4"372."1s72. 88F#1v-U3YRXXbhh/"2::<4"372."1s72.9/	 	/' '
4 4s   9H32&I 3H=	 I
c           
         | j                          t        | j                  | j                  j                  z  j                         | j                  | j                  j                  z         t        D ]d  }t        j                  d      5  | j                  j                  |      }d d d        | j                        }t        D ]  }t        j                  |t        j                        r| j                  j                  |      }nDt        j                  d      5  | j                  j                  j                  |      }d d d        | j                        }||j                  z  }||j                  z  }t!        |j                         |dt#        |      j%                         z         t'        |j(                  |j(                          g y # 1 sw Y   5xY w# 1 sw Y   xY w)Nr  r  g+=)atol)r  r   r  r  r8  r   r  r  r$   rC   r  rn   r   rf   r.  ru  r   r^  rR   r   r8   r  s	            r3   test_muz_TestArithmetic.test_muz  sf    	DJJ5>>@88dhhjj0	2 " 	0AX. 'HHOOA&'..#C% 0==B$6$67*AX6 4 HHMM0034nnQ'W355[

b%*3r7;;=%8:RXXbhh/0		0' '4 4s   G"&G)G&	)G2N)r   r   r   r  r  r  r  rZ   r5   r3   rz  rz  4  s    ..)/V0r5   rz  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)_TestMinMaxc                    t         j                  t         j                  t         j                  t         j                  t         j
                  fD ]K  }t        j                  d|      j                  dd      }| j                  |      }t        |j                         d       t        |j                         d       t        |j                         j                  |       t        |j                         j                  |       |dz  }| j                  |      }t        |j                         d       t        |j                         d       |dz  }| j                  |      }t        |j                         d	       t        |j                         d       N | j                  t        j                  d
d      j                  dd            }t        |j                         d
       t        |j                         j                  |j                         | }t        |j                         d       | j                  t        j                  d            }t        |j                         d       t        |j                         d       t        |j                         j                  |j                         t        j                  dt              j                  dd      }d|ddd d f<   | j                  |      }t        |j                         d       t        |j                         d       t        j                  d      t        j                  d      t        j                  d      fD ]G  }| j                  |      }t        t         |j                         t        t         |j                         I y )Nr  rL  rH  rk  r      r  iir   rO   r   r  r_   r  r   rO   rO   r   )rC   rI  r   rS   r`   rK  r   r  r   r   rh   rR   r8   r   r2  r   r   )r   r8   rw  r  r4  s        r3   test_minmaxz_TestMinMax.test_minmax  s   jj"**bhh"--P 	%E		"E*221Q7Aq!A!$"%..GAq!A#&!$FAq!A#&!$#	%( NN299Q+33Aq9:QUUWa QUUW]]AGG,BQUUWb! NN288F+,QUUWa QUUWa QUUW]]AGG, IIb&..q3!A#q&	NN1QUUWa QUUWb! ((6"BHHW$5rxx7HI 	-Aq!A*aee,*aee,	-r5   c                     t        j                  d      j                  dd      }d|dd d f<   d|d d df<   d|d<   d|d	<   | j                  |      }g d
}|D ]x  }t	        |j                  |      j                         |j                  |d             t	        |j                  |      j                         |j                  |d             z t        j                  dd      j                  dd      }| j                  |      }|D ]x  }t	        |j                  |      j                         |j                  |d             t	        |j                  |      j                         |j                  |d             z t        j                  d      }| j                  |      }|D ]x  }t	        |j                  |      j                         |j                  |d             t	        |j                  |      j                         |j                  |d             z ddg}ddg}t        j                  d      }| j                  |      }|D ]:  }t        t        |j                  |       t        t        |j
                  |       < |D ]|  }t	        t        j                  d      |j                  |      j                                t	        t        j                  d      |j                  |      j                                ~ t        j                  d      }| j                  |      }|D ]:  }t        t        |j                  |       t        t        |j
                  |       < |D ]|  }t	        t        j                  d      |j                  |      j                                t	        t        j                  d      |j                  |      j                                ~ y )Nr@  rH  rO   r   r   r  r3  r  rw  r  r  r   r   r  Tr  3   )rO   rH  r  r  r  r  r  )rC   r   r  r   r   rR   r   rh   r   r   r   )r   rw  r  r  r  	axes_evenaxes_odds          r3   test_minmax_axisz_TestMinMax.test_minmax_axis  s]   IIbM!!!R(!Q$!Q$$$NN1 	D4 ((*AEEtdE,K 4 ((*AEEtdE,K		 IIa$$R+NN1 	D4 ((*AEEtdE,K 4 ((*AEEtdE,K		 HHWNN1 	D4 ((*AEEtdE,K 4 ((*AEEtdE,K		 G	r7 HHWNN1 	8D*aee$7*aee$7	8  	MDrxx/D1A1I1I1KLrxx/D1A1I1I1KL	M HHWNN1 	8D*aee$7*aee$7	8  	MDrxx/D1A1I1I1KLrxx/D1A1I1I1KL	Mr5   c                 x   t        t        j                  d      j                  dd      t              }d|dd d f<   d|d d df<   d|d<   d	|d
<   t        j
                  |d<   t        j
                  |d<   | j                  |      }|j                         }t        j                  |      sJ |t        j                  |      k(  sJ |j                         }t        j                  |      sJ |t        j                  |      k(  sJ g d}|D ]  }|j                  |      }t        |t              sJ t        |j                         t        j                  ||             |j                  |      }t        |t              sJ t        |j                         t        j                  ||              y )Nr@  rH  rO   rL  r   r   r  r3  r  rw  r  )r   rk  r  r  )r(   rC   r   r  r2  r   r   nanmaxr  nanminrB   r   r   r   )	r   rw  r  X_nan_maximumX_nan_minimumr  r  X_nan_maximaX_nan_minimas	            r3   test_nanminmaxz_TestMinMax.test_nanminmax  su   299R=((2.e<!Q$!Q$$$&&$&&$NN1
{{=)))		!,,,
{{=)))		!,,, 		5D888.LlJ777L002IIad35 888.LlJ777L002IIad35		5r5   c                    t        g dg dg dg      }| j                  |      }dD ]W  }t        ||      }t        t        |d       t        t
        |d       t        t
        |d       t        t        |d	d	
       Y y )Nr  r  r  )rh   rR   r   r  r  r  r   r  )r   r   r   r   r   r  )r   r   r   fnamer   s        r3   test_minmax_invalid_paramsz&_TestMinMax.test_minmax_invalid_params$  sv    Y! " s## 	;E5%(D*d3)T7)T4*d:	;r5   c                 P   ddl m} t        g dg dg dg      }| j                  |      }t	        ||j
                        ret        t        j                  |      t        j                  |             t        t        j                  |      t        j                  |             y y )Nr   _datar  r  r  )
scipy.sparser  r   r   rB   _minmax_mixinr   rC   rh   rR   )r   r  r   r   s       r3   test_numpy_minmaxz_TestMinMax.test_numpy_minmax1  sy     	'Y! " s# eU001rvve}bffSk:rvve}bffSk: 2r5   c           
         ddl m} t        j                  g dg dg dg dg dg      }|j	                         }t        j                  dd	gd
dgg      }t        j                  dd	gd
dgg      }t        j                  g dg dg dg      }|||||fD ]  }| j                  |      }t        ||j                        s,t        |j                         t        j                  |             t        |j                         t        j                  |             t        |j                  d      t        t        j                  |d                   t        |j                  d      t        t        j                  |d                   t        |j                  d      t        t        j                  |d      j                  dd                   t        |j                  d      t        t        j                  |d      j                  dd                    t        j                  d      }t        j                  d      }dD ]K  }	| j                  |      }t        t        |j                  |	       t        t        |j                  |	       M dD ]K  }	| j                  |      }t        t        |j                  |	       t        t        |j                  |	       M y )Nr   r  )r  rH  r_   r   )r   r   r  r  )r  r  ri  r\  r  )r   r_   r   r   rk  r   r  rH  )rH  rH  r   )rk  r  rO   )r   rk  r  r  r   r  r  r  rd   )Nr   )r  r  rC   r   r   r   rB   r  r   argmaxargminr'   r  r  r   r   )
r   r  r  D2D3D4D5rw  r   r  s
             r3   test_argmaxz_TestMinMax.test_argmaxC  sD   &XX
  \\^XX1v1v&'XX1v1v&'XXy*i89b"b"% 	HA..#Cc5#6#67ryy|4ryy|4+!"))AA"679+!"))AA"679 +!"))AA"6">">r1"EFH+!"))AA"6">">r1"EFH	H$ XXfXXf 	=D..$C*cjjt<*cjjt<	=
  	=D..$C*cjjt<*cjjt<	=r5   N)	r   r   r   r  r  r  r  r  r  rZ   r5   r3   r  r    s#    --^?MB5<;;$,=r5   r  c                       e Zd Zd Zy)_TestGetNnzAxisc                 (   t        ddgddgddgg      }|j                  t              }| j                  |      }t        j
                  t        j                  f}t        |j                  d       |j                  d              t        |j                         |j                                t        |j                  d      |j                  d             t        |j                  d      j                  |       t        |j                  d      |j                  d             t        |j                  d      j                  |       t        |j                  d	      |j                  d	             t        |j                  d	      j                  |       t        |j                  d
      |j                  d
             t        |j                  d
      j                  |       t        t        |j                  d       y )Nr   r_   r   rH  r  r  r  r   r  r  )r   rn   r   r   rC   rS   r`   r   r  getnnzr4   r8   r   r   )r   r   bool_datr   accepted_return_dtypess        r3   test_getnnz_axisz _TestGetNnzAxis.test_getnnz_axiss  s   aVV!W  ::d#s#"$((BHH!58<<T<2ELLdL4KL8<<>5<<>:8<<Q</11EF%,,A,&,,.DE8<<Q</11EF%,,A,&,,.DE8<<R<0%,,B,2GH%,,B,'--/EF8<<R<0%,,B,2GH%,,B,'--/EFj%,,Q7r5   N)r   r   r   r  rZ   r5   r3   r  r  r  s    8r5   r  c                     |r| S d }t        | j                        }| j                  j                         D ]"  \  }}|j                  d      s ||      ||<   $ 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                 B     t        j                          fd       }|S )Nc                      	  | i |S # t         t        t        t        t        f$ r t        j                  d      w xY w)Nr  )rm  r  r   r  AttributeErrorr   r   )rG   r   fcs     r3   wrapperz6_possibly_unimplemented.<locals>.wrap.<locals>.wrapper  sF    Aq<B<'+Y
"N4 A ++&?@@As    4?)	functoolswraps)r  r  s   ` r3   wrapz%_possibly_unimplemented.<locals>.wrap  s'    __R A !A Nr5   test_NotImplemented)dictr@   rT  
startswithr  r   	__bases__)r   requirer  new_dictr   r   s         r3   _possibly_unimplementedr    s    
 
		 %,,,,. 	,JD$w'!%d	, CLL#33MM 	r5   c	                 >   t         t        t        |       t        t        t
        t        t        |      t        t        |      t        t        |      t        t        |      t        t        |xr |      t        t        |xr |      t        t        |      t        t        |      f}	i }
|	D ]e  }|j                  D ]T  }|j                  d      s|
j!                  |      }|(t#        d|j$                   d| d|j$                         ||
|<   V g t'        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  zTest class z overloads test z defined in TestBase)r   r  r  r  r  rz  r  r  r  rL  ra  ri  r  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                 r3   sparse_test_classr    s&    $[&9#$\7;$%7H$%7H$%=%13$%7%3%O8OQ$%=%:%K|M$[&9$_h?AE$ E LL 	D??7+iioG" ;s||n<L$(6g6F6F5G"I J JE$K	 
E2&&r5   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y)r  c                     t               5 }|j                  t        d       t        |i |cd d d        S # 1 sw Y   y xY w)Nz<Changing the sparsity structure of a csr_matrix is expensive)r   r  r"   r   r   argsr;   r  s       r3   r   zTestCSR.spcreator  ?      	/CJJ.UWt.v.	/ 	/ 	/   !6?c                 h   t        g dg dg dgd      }t        |      }t        |j                  g d       t	        |j
                  g d       t	        |j                  g d       t        |j                         d       t        |j                  d	       t	        |j                         |       y )
N)r   rk  r   r  r  r   )rk  r   r_   r  r  r   rj  )r   r   r   ro  r   rm  rn  r   r  ru  r   r   rL   r  s      r3   test_constructor1zTestCSR.test_constructor1  s    9"$ m!#((733;;w/3::i0SZZ\!$SZZ&3;;=!,r5   c                     t        dd      }d|d<   t        |      }t        |j                  dg       t	        |j
                  dg       t	        |j                  g d       t        |j                         |       y )Nr  r  r   rH  r  rk  )r   r   r   r   r   r   r   )r   r   r   ro  r   rm  rn  r   r  s      r3   test_constructor2zTestCSR.test_constructor2  s^    %#m!#((A3/3;;s+3::o6!#++-3r5   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        |j                         |       y )	Nr   r   r_   r   r   r  r  r  )r   r   r   ro  r   rm  rn  r   r  s      r3   test_constructor3zTestCSR.test_constructor3  sm    Aq6q6q6! m!#((733;;w/3::i0!#++-3r5   c                    t        g d      }t        g d      }t        g d      }t        ||f      }t        ||fd      }t        t	        d      j                  dd      |j                                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        ||j                                t        g dg dg dff      }|j                  dk(  sJ y )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-  rS  g      &@r.  g       @g      @rD  r  r  rk  r              r   r   rL  r   r   r   r   r   r_   r_   r   r   r   r   r   r_   )
r   r	   r   r   r   r  r   rC   uint64r4  )r   rq  rr  ro  r  rj  r  s          r3   test_constructor4zTestCSR.test_constructor4  s    5656 3 4 SI$r5)6":--a3S[[]C 9a.Aq6Aq6*:;299M	1~1v.bii@5#++-0 )i%;<=ww!||r5   c                     t        g d      }t        g d      }t        g d      }t        |||f      }t        |j                  d       y Nr   r   r   r   r   rH  r   r_   r  rA  )r   r   r   r   r   rn  rm  ro  rj  s        r3   test_constructor5zTestCSR.test_constructor5  ?    y!	"Y$01399U+r5   c                     g d}g d}g d}t        |||f      }t        |j                  d       t        t	        j
                  |j                  t        j                               y r  )r   r   r   r   rC   rf   r8   signedintegerr  s        r3   test_constructor6zTestCSR.test_constructor6  sM    $01399e,cii)9)9:;r5   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        |j                         |       y )Nr  r   )r   r_   r   r   r   r_   rL  r   r_   rk  r  r3  r   r  r  )rH  r   r  r   )r   r   rC   r`   r   r   rn  r8   rS   rm  r   r   )r   ro  rr  ptrrG   rL   s         r3   test_constructor_smallcolz!TestCSR.test_constructor_smallcol#  s    ay1}&bhh7L1c3'v69"$ 	QXX^^RXXbhh%78QYY__bhhrxx&89199;*r5   c           	      p   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       y )	Nr  r   r  r   r_   rL  r   r   )r   rC   rQ   rS   rR   r   r`   r   r   rn  r8   rm  r   r   )r   ro  largerr  r  rG   s         r3   test_constructor_largecolz!TestCSR.test_constructor_largecol3  s    ay1}"&&,Q1eU1WeAg6bhhGL1c3'(QXX^^RXXbhh%78QYY__bhhrxx&89177QC
O4r5   c                 .   t        d      }t        g d      }t        g d      }t        |||fd      }|j                         }|j	                          t        |j                  g d       t        |j                         |j                                y )NrH  r  r_   r   rH  rk  r   r   rH  r_   rO   r  r   r_   r  rk  rH  )r   r   r   r   rI  r   rm  r   r   ro  rm  rn  r  r  s         r3   test_sort_indiceszTestCSR.test_sort_indices@  sm    ay(y!$0?hhj3;;73;;=#++-8r5   c                 ^   t        g d      }t        g d      }t        g d      }t        |||fd      }|j                         }|j                          t	        |j
                  d       t	        |j                  g d       t	        |j                         |j                                y )Nr   r   r   r   r_   r   r   r   r   r_   r   rk  rH  r  r  r  r   r   r  r
  r  r   r  )r   r   r   eliminate_zerosr   r4  ro  r   r  s         r3   test_eliminate_zeroszTestCSR.test_eliminate_zerosJ  ~    -.01y!$0?hhj377A&388I.3;;=#++-8r5   c           	         t        t        j                  d      j                  dd      dz        }dD ]  }t	        t        t         |      d        t        ||             }t	        |j                  |j                         t        |j                  |j                         t        |j                  |j                         t        |j                          t        t        |      |j                                       y )Nr  rk  rH  r\  r`  ra  rb  rc  rd  re  rf  rg  rh  r[  ri  rj  rk  rl  rm  rn  ro  rp  T)r   rC   r   r  r   ry  r   r   r   rm  rn  r   r   r  rS  r_  s       r3   test_ufuncszTestCSR.test_ufuncsU      ryy},,Q2S89J 	JA Q/6AB"((+qyy"**5qxx3rzz|^WR^AIIK-HI	Jr5   c                 P   t        d      }t        g d      }t        g d      }t        |||fd      }t        d      }t        g d      }t        g d      }t        |||fd      }t        ||z   j	                         |j	                         |j	                         z          y )	NrH  r  r	  r
  r  r  r  r   rH  r  r_   rk  r   r_   r  )r   r   r   r   r   r  s         r3   test_unsorted_arithmeticz TestCSR.test_unsorted_arithmetica      ay(y!$0?ay*+y!$0?cCi((*CKKMCKKM,IJr5   c                    t        j                  dgdgdgg      }t        j                  g d      }t         j                  j                  d       t	        t         j                  j                  dd            }| j                  |      }|||f   }t        |      r|j                         }t        ||||f          y Nr   r_   r   rc  r\   rH  r  
rC   r   r   r]   r'   r  r   r!   r   r   r   r"  r  rw  rN  r#  s         r3   test_fancy_indexing_broadcastz%TestCSR.test_fancy_indexing_broadcastl      HHqcA3_%HHY
		tRYY^^Aq)*NN1!fC=++-CS!AaC&!r5   c                    t        j                  ddg      }t        j                  ddg      }t        j                  ddg      }t        j                  ddg      }t        |||f      j                         }t	        d|j
                         t        |j
                  t              sJ t        |||f      j                         }t	        d|j
                         |j                          t	        d|j
                         t        |j                  |       t        |||f      j                         }d|_        t	        d|j
                         t        |j                  |       |j                          t        |j                  |       y)z@Ensure has_sorted_indices memoizes sorted state for sort_indicesr   r   r_   TFN)rC   r   r   r   r   rH  rB   r   rI  r   rm  )r   sorted_indsunsorted_indsro  rn  r4  s         r3   test_has_sorted_indiceszTestCSR.test_has_sorted_indicesz  s8   hh1v&!Q(xxA1a&!k62388:T1//0!..555mV45::<UA001 	
T1//0199k2mV45::<#T1//0199m4 	
199m4r5   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      j                         }t        d|j                         t        |j                  t              sJ |j                          t        d|j                         t        dt        |j                               t        |||f      j                         }d|_        t        d|j                         t        dt        |j                               |j                          t        dt        |j                               y)z=Ensure has_canonical_format memoizes state for sum_duplicatesr_   r   r   TFN)r   rC   r   r   has_canonical_formatr   rB   r   sum_duplicatesr   rm  )r   r4  rm  ro  rn  s        r3   test_has_canonical_formatz!TestCSR.test_has_canonical_format  sP    !rxx}bhh1v6FGHT1112((Aq6"xxA1a&!gv./446UA223!00$777 	
T1112QAII'gv./446!%T1112QAII' 	
QAII'r5   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    	 y )Nr_   rL  r   r   r  r           r  )rC   r   rS   r   r   rn  r8   r`   r   rn  rm  valsrG   rL   r  rQ  r   rR  rS  r9   s               r3   test_scalar_idx_dtypezTestCSR.test_scalar_idx_dtype  P    !288,((1BHH-xx{gv.lCgv.jAXXfBHH-bz6bz4|$z"QXX^^RXX.QXX^^RXX.QXX^^RXX.QXX^^RXX.QXX^^RXX.QXX^^RXX. Q1a# 	AE	r5   c                     t        g dg      }t        g dg      }||z   j                  dk(  sJ |j                  |      j                  dk(  sJ y )Nr  r   r   r   r_   r   )r   r4  r  r   rG   rL   s      r3   test_binop_explicit_zerosz!TestCSR.test_binop_explicit_zeros  sN     	{#	{#A{{azz!}  A%%%r5   N)r   r   r   r  r   rC   r  int_r   rK  r   r  r  r  r  r  r  r  r  r  r  r  r  r#  r(  r,  r4  r9  rZ   r5   r3   r  r    s    / /
 88RWWbjj"--@K
-44(,<+ 59	9
J	K"58(:0&r5   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y)r  c                     t               5 }|j                  t        d       t        |i |cd d d        S # 1 sw Y   y xY w)Nz<Changing the sparsity structure of a csc_matrix is expensive)r   r  r"   r   r  s       r3   r   zTestCSC.spcreator  r  r  c                 t   t        g dg dg dgd      }t        |      }t        |j                  g d       t	        |j
                  g d       t	        |j                  g d       t        |j                         d       t        |j                  |j                         t        |j                  d	       y )
Nr   r   r   r   r  r   r_   r   r   r   )r   r_   r   r   )r   r_   r   r_   rC  rk  rk  )r   r   r   ro  r   rm  rn  r   r  r   ru  r  s      r3   r  zTestCSC.test_constructor1  sx    <|<cBm!#((953;;y13::k2SZZ\!$SYYqww'SZZ&r5   c                     t        dd      }d|d<   t        |      }t        |j                  dg       t	        |j
                  dg       t	        |j                  g d       y )Nr  r   rH  )r_   rk  r_   )r   r   r   r   r   r   r   )r   r   r   ro  r   rm  rn  r  s      r3   r  zTestCSC.test_constructor2  sN    %#m!#((A3/3;;s+3::o6r5   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       y )Nr   r   r_   r   r  )r   r   r   ro  r   rm  rn  r  s      r3   r  zTestCSC.test_constructor3  s\    Aq6Aq6Aq6*C0m!#((Aa513;;!u-3::g.r5   c                 :   t        g d      }t        g d      }t        g d      }t        ||f      }t        ||fd      }t        t	        d      j                  dd      |j                                t        g dg d	g d
ff      }|j                  dk(  sJ y )Nr  r  r  r  r  rk  r   r  r  r  r_   )r   r	   r   r   r   r  r   r4  )r   rq  rr  ro  r  rk  s         r3   r  zTestCSC.test_constructor4  s    5656CDSI$r5)6":--a3S[[]C )i%;<=ww!||r5   c                     t        g d      }t        g d      }t        g d      }t        |||f      }t        |j                  d       y Nr  r  r  )r  r   )r   r   r   r   r   rn  rm  ro  rk  s        r3   r  zTestCSC.test_constructor5  r  r5   c                     g d}g d}g d}t        |||f      }t        |j                  d       t        t	        j
                  |j                  t        j                               y rD  )r   r   r   r   rC   rf   r8   r  rE  s        r3   r  zTestCSC.test_constructor6  sM    $01399U+cii)9)9:;r5   c                 ^   t        g d      }t        g d      }t        g d      }t        |||fd      }|j                         }|j                          t	        |j
                  d       t	        |j                  g d       t	        |j                         |j                                y )Nr  r  r  rO   r_   r  r   r  )r   r   r   r  r   r4  ro  r   r  s         r3   r  zTestCSC.test_eliminate_zeros  r  r5   c                    t        d      }t        g d      }g d}t        |||fd      }|j                         }|j	                          t        |j                  g d       t        |j                         |j                                y )NrH  r  r	  rH  r  r  )r   r   r   r   rI  r   rm  r   )r   ro  rq  r  r  r  s         r3   r  zTestCSC.test_sort_indices#  sh    ayO$$S)8hhj3;;73;;=#++-8r5   c           	         t        t        j                  d      j                  dd      dz        }dD ]  }t	        t        t        |      d        t        ||             }t	        |j                  |j                         t        |j                  |j                         t        |j                  |j                         t        |j                          t        t        |      |j                                       y )N   r  r   g      5@r  T)r   rC   r   r  r   ry  r   r   r   r   rm  rn  r   r  s       r3   r  zTestCSC.test_ufuncs-  r  r5   c                 P   t        d      }t        g d      }t        g d      }t        |||fd      }t        d      }t        g d      }t        g d      }t        |||fd      }t        ||z   j	                         |j	                         |j	                         z          y )	NrH  r  r	  rH  r  r  r  r  )r   r   r   r   r   r  s         r3   r  z TestCSC.test_unsorted_arithmetic9  r  r5   c                    t        j                  dgdgdgg      }t        j                  g d      }t         j                  j                  d       t	        t         j                  j                  dd            }| j                  |      }|||f   }t        |      r|j                         }t        ||||f          y r   r!  r"  s         r3   r#  z%TestCSC.test_fancy_indexing_broadcastD  r$  r5   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    	 y )
Nr_   rL  r   )r/  r   r  )r1  r   r  r.  r0  )	rC   r   rS   r   r   r   rn  r8   r`   r2  s               r3   r4  zTestCSC.test_scalar_idx_dtypeR  r5  r5   N)r   r   r   r  r   rC   r  r:  r   rK  r   r  r  r  r  r  r  r  r  r  r  r#  r4  rZ   r5   r3   r  r    sr    / /
 88RWWbjj"--@K'7/,<	99
J	K"r5   r  c                   z    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y)r   c                     t        d      }d|d<   d|d<   ||j                  z  }||j                  z  }t        |j	                         |j	                                y )NrO   rO   rO   r  r  rH  r  )r   r8  r  r   r   )r   rJ   rw  r  s       r3   	test_multzTestDOK.test_multr  sN    w##accEaccE199;		4r5   c                     | j                  d      }d|d<   d|d<   |dz   }t        ddgddgddgg      }t        |j                         |       |d	z   }|d	z   }t        |j                         |       y )
Nrv  r  r  r  rO   r   r  r+  )r   r   r   r   r  s      r3   test_add_nonzerozTestDOK.test_add_nonzeroz  sz    NN5!##FB7RHr2h/0199;*FF199;*r5   c                     | j                  d      }d|d<   d|d<   t        |dz  j                         |j                         dz         t        |dz  j                         |j                         dz         y Nrv  rU  r  r  r  r+  r  r   r   r   r_  s     r3   test_dok_divide_scalarzTestDOK.test_dok_divide_scalar  s_    NN5!##AbD>>+QYY[^<AaC==?AIIKM:r5   c                 d   d\  }}t        ||f      }d|d<   d|d<   d|d<   d|d	<   d
|d<   d|d<   t        |j                         d d |dz
  f   t        |             |j	                         }t        |j                         d d |dz
  f   t        |             ||}}|j                         }t        |j                  ||f       t        |j                         |dz
  d d f   t        |             |j                         }t        |j                         |dz
  d d f   t        |             y )N)r  r  r   r  r_   r  r   r  rk  r  rH  r  r  r  )	r   r   r   r   rM  r   r   r   rN  )r   rT  r  rG   rk  rL   rj  s          r3   test_convertzTestDOK.test_convert  s   A1v ###### 	199;q1u-uQy9 ggi3;;=1Q3/q; QAKKMQWWq!f%199;qs1u-uQy9 ggi3;;=1Q/q;r5   c                 T   t        t        t               t        g dg dg dgd      }t        |      }t	        |j
                  |j
                         t	        |j                         |       t        |      }t	        |j                         |j                                g dg dg}t        |t        j                        }t	        |j
                  t        j                         |j                         }t	        |j
                  t        j                         t        ||       y )Nr>  r  r?  r   r  r  rL  )r   r  r   r   r   r8   r   r   rC   rI  r   )r   rL   rJ   rQ  ro  r   das          r3   	test_ctorzTestDOK.test_ctor  s    i, <|<cBqMQWWagg&QYY[!$ qMQYY[!))+.9%t2::.QWWbjj)YY[RXXrzz*2t$r5   c                     t        d      }d|d<   t        d|j                         vd       t        d      }d|d d df<   t        t        |j                               dk(  d       y )Nr3  r   r  zUnexpected entry (0,0) in keyszUnexpected entries in keys)r   r   keysr   r8  s      r3   test_ticket1160zTestDOK.test_ticket1160  s`    u# 	QVVX%'GH u!A#AFFH"$@Ar5   N)r   r   r   r   r   rC   r:  r   rK  r   rS  rV  rZ  r\  r_  rb  rZ   r5   r3   r   r   n  s>    I77BJJ6K5
+;<>%*Br5   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y
)TestLILc                    t        dt        j                        }d|d<   d|d<   t        dt        j                        }d|d<   d|d<   t	        j
                         dk7  r4t        ||j                  z  ||j                  z  j                                t        ||j                         j                  z  ||j                         j                  z  j                                y )NrQ  rO   r  y              4@rR  rL  ppc64le)
r   rC   rK  r   platformmachiner   r8  r   r   r  s      r3   test_dotzTestLIL.test_dot  s    (BMM*$$xr}}5$$ *q133wQSS(9(9(;<1q{{}.Q[[]__1D0M0M0OPr5   c                 t    t        d      }d|d<   |dz  }t        |d   d       |dz  }t        |d   d       y )Nr3  r_   r  rk  r   )r   r   )r   r9   s     r3   test_scalar_mulzTestLIL.test_scalar_mul  sC    v$aCQtWa aCQtWa r5   c                     | j                  d      }d|d<   d|d<   t        |dz  j                         |j                         dz         t        |dz  j                         |j                         dz         y rX  rY  r_  s     r3   test_truediv_scalarzTestLIL.test_truediv_scalar  sc    NN6"$$AF++-qyy{R/?@AE??,aiikAo>r5   c                    t        g dg dg      }t        g dg dg      }|||z   f|||z
  fd|dz  fd}|j                         D ]U  \  }\  }}|j                         } t        |d|z        |       t	        |j                         |j                                W t        dt        j                  d      	      }t        g d
      }|dd d fxx   |z  cc<   t	        |dd d f   j                         j                         |       y )Nr   r_   r   r  r  r   )addsubmulz__i%s__r  r   rL  )皙?rs  rs  r   )
r   rT  r   r   r   r   rC   r8   r   squeeze)r   rJ   rK   ro  opr   r9  r  s           r3   test_inplace_opszTestLIL.test_inplace_ops  s    	9-.	9-.1q5z1q5z1q5z# &*ZZ\ 	E!B!VVXF+GFIN+E2v~~/1A1A1CD		E vRXXi%89/"	!Q$11QT7??,446:r5   c                     g dg dg}t        t        |            }t        |      D ]-  \  }}t        |j	                         t        ||   d             / y )Nr  r  r_   )ndmin)r   r   r  r   r   )r   row_datarK   r  rq  s        r3   test_lil_iterationzTestLIL.test_lil_iteration  sN    y)uX'l 	KFAss{{}eHQKq.IJ	Kr5   c                     t        d      }d|d<   d|d<   d|d<   d|d	<   d
|d<   |j                         }t        |      }t        |j                         |j                                y )NrQ  rO   r  r  rR  r  )r  r   r  )r   r  r@  )r  r  )r   rN  r   r   )r   rK   r  rw  s       r3   test_lil_from_csrzTestLIL.test_lil_from_csr  se     x $$$$$GGIqM199;		4r5   c                     t        t        d      j                  dd            }t        |      }t	        |t        g d      ddf   j                         |t        g d      ddf          y )Nr  rH  r  r_   r   )r'   r   r  r   r   r   r   )r   r4  rJ   s      r3   test_fancy_indexing_lilzTestLIL.test_fancy_indexing_lil  sb    VBZ''1-.qMQuY'1,-557uY'1,-	/r5   c                    t        d      }d|d<   d|d<   d|d<   d|d	<   t        d      }d|d<   d|d
<   d|d<   d|d	<   d|d<   t        |j                  |      j                         |j                  |      j                                t        |j                  |      j                         g dg dg dg dg       y )Nr  r   r  r_   r  r   rw  rk  r  r  rv  rC  r]  r   r   r  )r   r  r   )r   r   r  r   )r   lrT  s      r3   test_point_wise_multiplyz TestLIL.test_point_wise_multiply&  s    v$$$$v$$$$$1::a=002::a=002	4 	1::a=002%%%&(	)r5   c                 \    t        t        j                  d            }|dz  }d|dd d f<   y )Nr3  r.  r   )r   rC   r  r  s     r3   test_lil_multiply_removalz!TestLIL.test_lil_multiply_removal=  s*    rwwv'	R!Q$r5   N)r   r   r   r   r   rC   r:  r   rK  r   ri  rk  rm  rv  rz  r|  r~  r  r  rZ   r5   r3   rd  rd    sN    I77BJJ6KQ!?;(K5/).r5   rd  )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                   j#                  dd      d	        Zd
 Zd Zd Zd Zd Zd Zd Zy)TestCOOc                    t        g d      }t        g d      }t        g d      }t        |||ffd      }t        t        d      j	                  dd      |j                                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        ||j                                y )Nr  r  r  r  r  rk  r   r  r   r   rL  )r   r   r   r   r  r   rC   r  )r   rq  rr  ro  rp  r  s         r3   r  zTestCOO.test_constructor1M  s    5656CD$Cy)%06":--a3S[[]C 9a.Aq6Aq6*:;299M	1~1v.bii@5#++-0r5   c                     t        g d      }t        g d      }t        g d      }t        |||ffd      }t        g dg dg dg      }t        ||j                                y )N)
r   r   r_   r_   r_   r_   r   r   r_   r_   )
r   r_   r   r_   r   r   r   r   r   r_   )
r_   r  r\  rH  r  r   r  r_   r   rZ  r3  )rk  r  r   r  )ri  r  r   )r   r   r   r   )r   rq  rr  ro  rp  r   s         r3   r  zTestCOO.test_constructor2[  sY    )*)*-.$Cy)%0ZJ783.r5   c                    t        d      }t        |j                  d       t        |j                  g        t        |j                  g        t        |j
                  g        t        |j                         t        d             y )Nr  )r   r   r   rq  rr  ro  r   r   r   rp  s     r3   r  zTestCOO.test_constructor3f  sX    399U+3772&3772&388B'3;;=%-8r5   c                     t        g dg dg dg      }t        |      }t        |j                         |       t        g d      }t        |      }t        |j                         |j	                  dd             t        j                  t        d      5  t        g dg d	g d
f       d d d        t        j                  t        d      5  t        g dd       d d d        y # 1 sw Y   =xY w# 1 sw Y   y xY w)Nr   r   r   r   )r  r   r   r   )r   rk  r   r   r   r  zobject cannot be interpretedr  )r   r     !   r  r  zinconsistent shapesr  r  )	r   r   r   r   r  r   r   r  r   )r   r   rp  s      r3   r  zTestCOO.test_constructor4p  s    Y  ! o3;;=#. Io3;;=#++a*<= ]]9,KL 	F|(DE	F ]]:-CD 	6f5	6 	6		F 	F	6 	6s   C(C4(C14C=c                     dg}t        |dgdgffd       }|j                  t        j                  |      j                  k(  sJ y )Nr   r   rL  )r   r8   rC   r   )r   ro  rp  s      r3   "test_constructor_data_ij_dtypeNonez*TestCOO.test_constructor_data_ij_dtypeNone  sB    s$!qc
+48yyBHHTN00000r5   FzCOO does not have a __getitem__runreasonc                      y r7   rZ   r   s    r3   rB  zTestCOO.test_iterator      r5   c                 t    ddgg}t        |      j                         }t        |j                         |       y rd   )r   todiar   r   )r   r   rs  s      r3   test_todia_all_zeroszTestCOO.test_todia_all_zeros  s0    Q%%'3;;=%0r5   c                    t        d      }|j                          t        ddgddgddgff      }|j                          t        |j                         ddgddgg       t        ddgddgddgff      }|j                          t        |j                         ddgddgg       t        |j                  dg       t        |j
                  dg       t        |j                  dg       y )Nr  r   r_   r   r   )r   r+  r   r   rq  rr  ro  r  s     r3   test_sum_duplicateszTestCOO.test_sum_duplicates  s    1Q%1Q%!A013;;=Aa5!A-81Q%1Q%!A013;;=Aa5!A-8377QC(377QC(388aS)r5   c                     t        g dg dg dff      }|j                         }t        |j                         |j                                y )Nr  r  r  )r   rJ  r   r   )r   rp  r=   s      r3   test_todok_duplicateszTestCOO.test_todok_duplicates  s7    )i%;<=iik3;;=#++-8r5   c                     t        g dg dg dff      }|j                         }t        |j                  dz   |j                         |j	                         }t        |j                  dz   |j                         y )Nr  r  r  r_   )r   rN  r   r4  rM  )r   rp  rj  rk  s       r3   test_tocompressed_duplicatesz$TestCOO.test_tocompressed_duplicates  sX    )i%;<=iikSWWq[#''*iikSWWq[#''*r5   c                 P   t        g d      }t        g d      }t        g d      }t        |||ffd      }|j                         }|j                          t	        |j
                  dk7  j                                t        |j                         |j                                y )Nr  )r   r   r   r   r   r   r   r   r  r
  r  r   )	r   r   r   r  r   ro  allr   r   )r   ro  rq  rr  r  r  s         r3   r  zTestCOO.test_eliminate_zeros  s~    -.,-,-$c
+6:hhjQ##%&3;;=#++-8r5   c                    g dg dg dg}d}t        |      }|j                  |      }t        |j                  |j                  u        |j                  |d      }t        |j                  |j                  u        |j                  |d      }t        t	        j
                  |j                  |j                                y )Nr  r  r  r  Fr  T)r   r  r   ro  rC   rI   )r   ri   	new_shaper9   r:   s        r3   test_reshape_copyzTestCOO.test_reshape_copy  s    lO<	sOIIi !&& !IIieI,!&& !IIidI+B''778r5   c                     t        dgdgdgffd      }t        dgdgdgffd      }t        |j                  dd      |k7  j                  dk(         t        |j                  dd	      |k7  j                  dk(         y )
Nr   i- r  )-   )r  r  r  r  r   r  )r   r   r  r4  )r   mat1mat2s      r3   test_large_dimensions_reshapez%TestCOO.test_large_dimensions_reshape  s     A3'TF 34oFA3$' 34oF 	oS9TAFF!KLoS9TAFF!KLr5   N)r   r   r   r   r   rC   r:  r   rK  r   r  r  r  r  r  r   r  xfailrB  r  r  r  r  r  r  r  rZ   r5   r3   r  r  G  s     I77BJJ6K1	/96*1
 [[5)JK L1
*9
+99	Mr5   r  )r  r  r  r  r  c                      e Zd ZeZej                  ej                  ej                  gZ	d Z
ej                  j                  dd      d        Z ed      d        Zej                  j#                  d	      d
        Zd Zd Zd Zy)TestDIAc                     t        g dg dg dg dg      }t        j                   g dg      j                  dd      }t        j                   g d	      }t        t	        ||fd
      j                         |       y )N)r   r   r   r   )r   r_   r   rk  )r   r_   r   r   )r   r   r   rk  r  r   r   r  r   r  r_   r  r  )r   rC   repeatr   r   r   )r   rw  ro  rt  s       r3   r  zTestDIA.test_constructor1  sj    <! " xx$++A1+5((8$Zwv>FFH!Lr5   FzDIA does not have a __getitem__r  c                      y r7   rZ   r   s    r3   rB  zTestDIA.test_iterator  r  r5   r   c                 8   t        t        j                  d            }t        |j                  j
                  t        j                         |j                  dd       t        |j                  j
                  t        j                         t        t        j                  d            }t        |j                  j
                  t        j                         |j                  dd       t        |j                  j
                  t        j                         y )Nr   )r   r_   r  rk  )	r   rC   r    r   rt  r8   rS   r  r`   r   rT  s     r3   test_setdiag_dtypezTestDIA.test_setdiag_dtype  s    rvvay!QYY__bhh/			$!	QYY__bhh/rvvay!QYY__bhh/			$!	QYY__bhh/r5   zDIA stores extra zerosr  c                      y r7   rZ   r   s    r3   r  zTestDIA.test_getnnz_axis  r  r5   c                     t        g dgdgfd      }|j                         }t        |j                         j                         |       t        |j	                         j                         |       y )Nr7  r  r  r  )r   r   r   rM  rN  )r   rT  r9  s      r3   test_convert_gh14555zTestDIA.test_convert_gh14555  sT    bT*&999;1779,,.91779,,.9r5   c                 &   t        ddgddgg      j                         }t        j                  |j                  |j
                  f|j                        }t        j                  t        j                  |      dkD        }|j                  |k(  sJ y )Nr   r_   r   rk  r   )
r   rO  rC   ravel_multi_indexrq  rr  r   r  diffr*  )r   rT  	flat_indsinds_are_sorteds       r3   test_tocoo_gh10050zTestDIA.test_tocoo_gh10050  st    AA'(..0((!%%A	&&!3a!78%%888r5   c                 ,   t        j                  g dg      j                  dd      }t        j                  g dt         j                        }t	        j
                  ||fd      }|j                         }|j                  j                  t         j                  k(  sJ |j                         }|j                  j                  t         j                  k(  sJ |j                         }|j                  j                  t         j                  k(  sJ y )	Nr  r   r   r  r  rL  r  r  )rC   r   r  rS   ru   	dia_arrayrO  rr  r8   rN  rm  rM  )r   ro  rt  rs  rp  rj  rk  s          r3   test_tocoo_tocsr_tocsc_gh19245z&TestDIA.test_tocoo_tocsr_tocsc_gh19245  s    xx'..qq.9((:RXX6gf=iikww}}(((iik{{  BHH,,,iik{{  BHH,,,r5   N)r   r   r   r   r   rC   r:  r   rK  r   r  r   r  r  rB  r   r  r   r  r  r  r  rZ   r5   r3   r  r    s     I77BJJ6KM [[5)JK L Q	0  	0 [[56 7:9-r5   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,                  j/                  dd      d        Zej,                  j/                  dd      d        Zd Zej,                  j/                  dd      d        Zej,                  j9                  ed      d        Zy)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	        |j                         |       t        |||f      }t	        |j                         |       y N)r   r_   r_   rk  )r   r_   r_   r   )rk  r_   r   r  r  r   ro  )r  r   rO   r   )r   rk  r  )r  r   r  r_   )r   rH  rO   )r  r   r  r   r  r  r  r  r  r  )r   r   r   r   r   r   )r   rn  rm  ro  rJ   r  s         r3   r  zTestBSR.test_constructor1  s    y!	"W~"$ %Q#% &Q$& 'Q$& 'Q )Ii0772CD$wv.V<S[[]A& $wv./S[[]A&r5   c                    dD ]0  }t        |      }t        t        |      j                         |       2 t        d      }t        t        |d      j                         |       t        t        |d      j                         |       t	        g dg dg dgg d	g d
g      }t        t        |      j                         |       t        t        |d      j                         |       t        t        |d      j                         |       t        t        |d      j                         |       t        t        |d      j                         |       t        t        |d      j                         |       t        t        |d      j                         |       t        t        |d      j                         |       t	        g dg dg dgg d	g d
g      }t        t        |d      j                         |       y )N)r  r  r  )rO   rk  )r   r  r  )rk  r  rw  r  r  r  r  r  r  r  r  r  r  r  )r_   r  )r   r  r  )r   r   r   r   r   )r   r   rJ   s      r3   r  zTestBSR.test_constructor23  s    B 	5EeAA..0!4	5 %LZV4<<>BZV4<<>B)Ii0772CDZ]**,a0Z199;Q?ZV4<<>BZV4<<>BZV4<<>BZW5==?CZW5==?CZW5==?C)Ii0772CDZV4<<>Br5   c                     g dg dg dff}t        ddgddgg      }t        t        |d	      j                         |       y )
Nr  r  r  r   r   r_   r   rw  r  )r   r   r   r   )r   argrJ   s      r3   r  zTestBSR.test_constructor3K  sA    '*+Aa5!A- Zv6>>@!Dr5   c                    d}t        j                  ||dft         j                        }t        j                  d|gt         j                        }t        j
                  |t         j                        }t        |||f|dfd       y )Nr  r   rL  r   F)r  r   )rC   r  r   r   rS   r   r   )r   r  ro  rn  rm  s        r3   r  zTestBSR.test_constructor4Q  sf     ww1ay01a&1))ARXX.D'6*q!f5Ir5   c                    d}t        j                  |      }t        j                  |||f      }t        j                  d|g      }t        j                  |      }t	        t
              5  t        |||f       d d d        t	        t
              5  t        |||fd       d d d        t	        t
              5  t        |||fd       d d d        y # 1 sw Y   ZxY w# 1 sw Y   >xY w# 1 sw Y   y xY w)Nr  r   r  r  r  )rC   r  r   r   r   r   r   )r   r  	data_1dimro  rn  rm  s         r3   r  zTestBSR.test_constructor5Z  s    GGAJ	ww1ay!1a&!))A,:& 	5	7F34	5 :& 	Egv.)D	E :& 	Bgv.&A	B 	B	5 	5	E 	E	B 	Bs$   +CC9C+CC(+C4c                 4   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 y )Nr   r   r_   rL  r  r  )rC   r   rS   r   r8   )r   rA   rn  rm  rL   s        r3   test_default_dtypezTestBSR.test_default_dtypen  s    3*sQCj)1a&1((Aq620FCww"((6*00000r5   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      }|j	                         }|j                         j	                         }t        |j                         |       t        |j                         |j                                y r  )r   r   r   r   rN  rO  r   r   )r   rn  rm  ro  rJ   AbsrAcsrAcsr_via_coos           r3   test_bsr_tocsrzTestBSR.test_bsr_tocsrv  s    |$%Y"$ %Q#% &Q$& 'Q$& 'Q ,l;Y')4&1Azz|zz|))+T\\^Q'T\\^\%9%9%;<r5   c                 v   t        g dddgddgg      j                  }|j                  ddd      }t        g d      }t        g d      }t	        |||fd      }|j                         }|j                          t        |j                  d	       t        |j                         |j                                y )
Nr  r   r  r_   r  r  )rk  r  r  r  )
r   r8  r  r   r   r   r  r   r4  r   r  s         r3   r  zTestBSR.test_eliminate_zeros  s    ,!uaUm<>>||Bq#01y!$0?hhj377C(3;;=#++-8r5   c                 ^   t         j                  j                  d       t        t         j                  j                  d      d      }d|j                  |j                  dk  <   |j                          t        |j                  d       t        |j                  j                  d       d|j                  |j                  dk  <   |j                          t        |j                  d       t        |j                  j                  d	       t        |j                         t        j                  d             |j                          t        |j                  d       t        |j                  j                  d	       t        |j                         t        j                  d             y )
Nr   )r  r  r  r  g?B   )r  r_   r   r-  ro  )rC   r   r]   r   ro  r  r   r4  r   r   r   r   r  s     r3   test_eliminate_zeros_all_zeroz%TestBSR.test_eliminate_zeros_all_zero  s   
		qryy''1VD !"qvv}	QUUB166<<4 !"qvv}	QUUA166<<3199;(:; 	
QUUA166<<3199;(:;r5   c                     t        t        d      j                  dd      d      }t        |j                  d         j                  dd      }t	        ||z  |j                         |z         y )Nx   r  r  rk  rH  r  r   r  r   r   r  r   r   r   r  s      r3   test_bsr_matveczTestBSR.test_bsr_matvec  sV    vg..s375I1771:&&r!,QqS!))+/*r5   c                     t        t        d      j                  dd      d      }t        |j                  d   dz        j                  dd      }t	        ||z  |j                         |z         y )	Nr  r  r  r  r  r   r  r  r  r  s      r3   test_bsr_matvecszTestBSR.test_bsr_matvecs  sZ    vg..s375I1771:a< ((A.QqS!))+/*r5   FzBSR does not have a __getitem__r  c                      y r7   rZ   r   s    r3   rB  zTestBSR.test_iterator  r  r5   zBSR does not have a __setitem__c                      y r7   rZ   r   s    r3   r  zTestBSR.test_setdiag  r  r5   c                 L   t        j                  g dg dg dg      }| j                  |d      }t        |j	                  d      d u        t        |j                         ddgd	dgd
dgg       |j	                  d       t        |j                         ddgd	dgg       |j	                  d       t        |j                         ddgd	dgddgg       |j	                  d       t        |j                         g dg dg dg       t        t        |j                  d       y )Nrs  rt  ru  r  r  rv  r   r   r_   r   rw  r  r>  r  r  rx  rM  s      r3   test_resize_blockedzTestBSR.test_resize_blocked  s   HHl""$ % NN1N/ D()199;!Q*+Q*+Q)1 	2 	
199;!Q*+Q)1 	2	199;!Q*+Q*+Q)1 	2 	
199;)5)5)7 	8 	j!((F3r5   c                      y r7   rZ   r   s    r3   r  z"TestBSR.test_setdiag_comprehensive  r  r5   zexceeds memory limitr  c                 B   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                         |||||
|fD ]  }||z    	 y # t        t        f$ r d}
d}Y (w xY w)
Nr_   rL  r   r  r.  r  r0  )r   r   r/  )r   r   r1  )
rC   r   rS   r   r   rn  r8   r`   MemoryErrorr   )r   rn  rm  r3  rG   rL   rQ  r   vals2vals3rR  rS  r9   s                r3   r4  zTestBSR.test_scalar_idx_dtype  s    !288,((1BHH-xx	"gv.lCgv.jA|$z"QXX^^RXX.QXX^^RXX.QXX^^RXX.QXX^^RXX.
	HH_-EHH]+EE7F3<HAE7F3:FA22 Q1a# 	AE	 Z( 	AA	s   B&H HHN)r   r   r   r   r   rC   r:  r   rK  r   r  r  r  r  r  r  r  r  r  r  r  r   r  r  rB  r  r  r  skipifIS_COLABr4  rZ   r5   r3   r
  r
    s	    I77BJJ6K'.C0EJB(1=.	9<.+
+
 [[5)JK L [[5)JK L4. [[5)JK L [[)?@ Ar5   r
  )r  r  r  r  r  r  c                 j   |j                  dd      }t        j                  | j                  t        j                        s.t        j                  | j                  t        j
                        r|| f|z   S | f|z   |fz   S | dk(  j                         }| j                  dd      } | dddxx   dz  cc<   d| ddd<   |d   j                  dkD  r=t        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 matrixrn  Nr   r_   r  r   c              3   &   K   | ]	  }|d      ywr  rZ   ).0ps     r3   	<genexpr>z&_same_sum_duplicate.<locals>.<genexpr>  s     ,QAaD,s   c              3   >   K   | ]  }|j                  d         yw)r_   N)r  )r  rm  s     r3   r  z&_same_sum_duplicate.<locals>.<genexpr>  s     7w"7s   )
poprC   rf   r8   r  unsignedintegerr  r  re   r  )ro  indsr;   rn  	zeros_pospospos1pos2s           r3   _same_sum_duplicater    sP   ZZ$'F	}}TZZ*	}}TZZ!3!34>7T>!7T>VI--##%I ;;qq;!D1INIDAJ |1,),,#a&{SW$#a&
}s12w&T
T
7$77D~w~w~!--r5   c                        e Zd Zd	 fd	Zej
                  j                  d      d        Zej
                  j                  d      d        Zej
                  j                  d      d        Z	 xZ
S )
_NonCanonicalMixinc                    t         |   } ||fi |}|j                         dk(  j                         }|d   j                  dkD  }|rZ|d   j                  dz  }t               5 }	|	j                  t        d       | j                  ||d   |   |d   |         }ddd       | j                  ||      }
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(  j%                                |S # 1 sw Y   xY w)
zcReplace D with a non-canonical equivalent: containing
        duplicate elements and explicit zerosr   r_   r  r   Nr   gh㈵>gHz>)rtol)superr   r   r  re   r   r  r"   _insert_explicit_zero_arg1_for_noncanonicalr   r8   rC   rI  rJ  r   r   ro  any)r   rw  sorted_indicesr;   	constructr4  zero_pos	has_zerosr  r  arg1NCr  r<  s                r3   r   z_NonCanonicalMixin.spcreator'  sW    G%	a"6"IIK1$--/a[%%)	  !#A"$ R

+U ..q(1+a.(1+a.QR **1n=& ggF7Ot&v& 88

BLL11
 DD

aiik= RWW\&&() 	9R Rs   &6EE z"bool(matrix) counts explicit zerosr  c                      y r7   rZ   r   s    r3   r   z_NonCanonicalMixin.test_boolO  r  r5   z!getnnz-axis counts explicit zerosc                      y r7   rZ   r   s    r3   r  z#_NonCanonicalMixin.test_getnnz_axisS  r  r5   znnz counts explicit zerosc                      y r7   rZ   r   s    r3   r6  z_NonCanonicalMixin.test_emptyW  r  r5   F)r   r   r   r   r   r  r   r   r  r6  __classcell__)r<  s   @r3   r  r  &  s    &P [[AB C [[@A B [[89 :r5   r  c                       e Zd ZddZd Zy)_NonCanonicalCompressedMixinc                    t        |j                  |j                  |j                        \  }}}|sOt	        ||dd       D ]=  \  }}||| ddd   j                         ||| ||| ddd   j                         ||| ? |||fS )5Return non-canonical constructor arg1 equivalent to M)rn  r   Nr  )r  ro  rm  rn  rA  r   )r   r4  r  ro  rm  rn  startstops           r3   r  z3_NonCanonicalCompressedMixin._arg1_for_noncanonical]  s     3AFFAII;<88!Egv"66!":6 At&-eD&9$B$&?&D&D&Fd##'d#3DbD#9#>#>#@U4 A Wf$$r5   c                     d|||f<   |S rd   rZ   r   r4  r  r  s       r3   r  z2_NonCanonicalCompressedMixin._insert_explicit_zerog  s    !A#r5   Nr  )r   r   r   r  r  rZ   r5   r3   r
  r
  \  s    %r5   r
  c                       e Zd Zd Zd Zej                  j                  dd      d        Zej                  j                  dd      d        Z	y	)
_NonCanonicalCSMixinc                 l      fd}t         D ]%  }dD ]  } |t        j                  |      |         ' y )Nc                 @   t        g dg dg dg dg|       }	j                  ||      }|j                  \  }}t        | |      D ]*  }t        | |      D ]  }t	        |||f   |||f           , dD ]#  }t        t        t        f|j                  |       % y )NrC  r  r  r]  rL  )r  r  )	r   r   r   r   r   r   r  r  r  )
r8   r  rw  rJ   r4  r7  r  r  r  r   s
            r3   r   z3_NonCanonicalCSMixin.test_getelement.<locals>.checkn  s    w  (-.A q@A''CAaA2q\ 1r1 1A 1Q31Q3011 C Jz95q}}bIJr5   )FTr  )r   r   r8   r  s   `   r3   r  z$_NonCanonicalCSMixin.test_getelementm  s;    	J  & 	7E"/ 7bhhuo~67	7r5   c                 d   t        j                  d      }| j                  |      }| j                  g dg      }|j                         |dd d f<   t	               5 }|j                  t        d       ||dd d f<   d d d        t        |j                         |       |j                         j                         |d d df<   t	               5 }|j                  t        d       |j                  |d d df<   d d d        t        |j                         |       y # 1 sw Y   xY w# 1 sw Y   0xY w)Nr   r  r   r  r_   )
rC   r    r   r   r   r  r"   r   r9  r8  )r   rw  rJ   rK   r  s        r3   test_setitem_sparsez(_NonCanonicalCSMixin.test_setitem_sparse  s    FF1INN1NNG9%!A#  	CJJ'Q AacF	 	199;*""$!A#  	CJJ'Q SSAacF	 	199;*	 		 	s    D*D&D#&D/Fz(inverse broken with non-canonical matrixr  c                      y r7   rZ   r   s    r3   r@  z_NonCanonicalCSMixin.test_inv  r  r5   z&solve broken with non-canonical matrixc                      y r7   rZ   r   s    r3   r  z_NonCanonicalCSMixin.test_solve  r  r5   N)
r   r   r   r  r  r   r  r  r@  r  rZ   r5   r3   r  r  l  s`    7*+. [[5)ST U [[5)QR Sr5   r  c                       e Zd Zy)TestCSRNonCanonicalNr   r   r   rZ   r5   r3   r  r        r5   r  c                       e Zd Zy)TestCSCNonCanonicalNr  rZ   r5   r3   r  r    r  r5   r  c                       e Zd Zd Zej
                  j                  dd      d        Zej
                  j                  dd      d        Zy)	TestBSRNonCanonicalc                 h    |j                         }d|||f<   |j                  |j                        S )Nr   r  )rN  rK  r  )r   r4  r  r  r9   s        r3   r  z)TestBSRNonCanonical._insert_explicit_zero  s/    GGI!A#www--r5   Fz&diagonal broken with non-canonical BSRr  c                      y r7   rZ   r   s    r3   r  z!TestBSRNonCanonical.test_diagonal  r  r5   z"expm broken with non-canonical BSRc                      y r7   rZ   r   s    r3   r<  zTestBSRNonCanonical.test_expm  r  r5   N)	r   r   r   r  r   r  r  r  r<  rZ   r5   r3   r   r     s[    .
 [[5)QR S [[5)MN Or5   r   c                        e Zd ZddZd Zd Zy)TestCOONonCanonicalNc                 l    t        |j                  |j                  |j                        \  }}}|||ffS )r  )r  ro  rq  rr  )r   r4  r  ro  rq  rr  s         r3   r  z*TestCOONonCanonical._arg1_for_noncanonical  s1    ,QVVQUUAEEBc3c3Zr5   c                    t         j                  |j                  j                  j	                  d      |j                  f   |_        t         j                  |j
                  j                  j	                  |      |j
                  f   |_        t         j                  |j                  j                  j	                  |      |j                  f   |_        |S rd   )rC   r_ro  r8   r  rq  rr  r  s       r3   r  z)TestCOONonCanonical._insert_explicit_zero  s    qvv||((+QVV34aeekk&&q)15501aeekk&&q)15501r5   c                 2   | j                  t        j                  d            }|j                          |j	                  ddgd       |j                          t        t        j                  t        j                  |j                        dk\               y )Nr   r_   r   r  r   )	r   rC   r    r+  r  r   r  r  rr  r  s     r3   test_setdiag_noncanonicalz-TestCOONonCanonical.test_setdiag_noncanonical  sf    NN266!9%				1a&A		rwwquu~*+,r5   r7   )r   r   r   r  r  r*  rZ   r5   r3   r%  r%    s     
-r5   r%  c            	   #     K   t         t        t        t        t        t
        t        g} ddddddddd}| D ]8  }t        t        |            D ]  }t        ||      }|j                  d      s"t        |d	d
      r0g }|j                  |      }t        |      r$|t        j                  j                  |      gz  }t!        j"                  t        j$                        t!        j&                  d      k\  r5t        |dg       }|D ]"  }|j(                  dv s|j+                  |       $ n$dD ]  }	t-        ||	      s|t        ||	      gz  }! t        j.                  |||         ; y w)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  r4  r  r  r  r  r  r  Fr  z3.6.0
pytestmark)r  r   r  xslow)marks)r
  r  r  r  r  r   rd  sorteddirr   r  r  r   r   r  r   r   parse__version__Versionr   rE   ry  param)
TEST_CLASSES
SKIP_TESTSr   method_namemethodr.  r/   markersr  mnames
             r3   cases_64bitr;    se    WgwWL =?A!A)P%B%B*G	J  B!#c(+ 	BKS+.F&&w/6 nn[19fkk..c.:;;E==!3!348PP%flB?G ' /99(LL!LL./ "F >"651!gfe&<%==E> ll35AA)	BBs   A,E2/E2=BE2%E2?3E2c                      e Zd ZeeeeegZd Z	d Z
d Zd Zd Zej                  j!                  d e             d        Zej                  j!                  d e             d        Zej                  j!                  d e             d	        Zej                  j!                  d e             d
        Zej                  j!                  d e             d        Zd Zy)	Test64Bitc                 N     |t         j                  j                  ||            S r7   )rC   r   r  )r   mat_clsrT  r  s       r3   _create_some_matrixzTest64Bit._create_some_matrix  s    ryy~~a+,,r5   c                    t        j                  |      }t        |t        t        t
        f      r4|j                  j                  |k(  xr |j                  j                  |k(  S t        |t              r4|j                  j                  |k(  xr |j                  j                  |k(  S t        |t              r|j                  j                  |k(  S t        d|d      )Nzmatrix z has no integer indices)rC   r8   rB   r   r   r   rm  rn  r   rq  rr  r   rt  r   )r   rT  r8   s      r3   _compare_index_dtypezTest64Bit._compare_index_dtype  s    a*j*=>IIOOu,K188>>U3JK:&EEKK5(Dquu{{e/CD:&IIOOu,-wqe+BCDDr5   c                 `     t        d       fd       } j                  D ]
  } ||        y )NrO   rk   c                 B    | t         j                  j                  dd            }t        j	                  |t         j
                                | t         j                  j                  dd            }t        j	                  |t         j                               y )NrO   r   r  )rC   r   r  r   rB  rS   r`   )r?  rT  r   s     r3   r   z4Test64Bit.test_decorator_maxval_limit.<locals>.check  sg    		r1-.AD--a:;		r1-.AD--a:;r5   r   MAT_CLASSESr   r   r?  s   `  r3   test_decorator_maxval_limitz%Test64Bit.test_decorator_maxval_limit  s:     
!b	1	< 
2	< '' 	G'N	r5   c                 `     t        d       fd       } j                  D ]
  } ||        y )NTr   c                    d}d}t        d      D ]d  }j                  | dd      }|xs  j                  |t        j                        }|xs  j                  |t        j
                        }|sa|sd y  t        d      )NFr  r  z#both 32 and 64 bit indices not seen)r   r@  rB  rC   rS   r`   rm   )r?  seen_32seen_64r  rT  r   s        r3   r   z5Test64Bit.test_decorator_maxval_random.<locals>.check  s    GG3Z L,,Wa;!KT%>%>q"((%K!KT%>%>q"((%KwL %%JKKr5   rF  rH  s   `  r3   test_decorator_maxval_randomz&Test64Bit.test_decorator_maxval_random  s<     
!	-
	L 
.
	L '' 	G'N	r5   c                 8    t        di |d        } |||       y )Nc                      |        }t        |d      r|j                          	  t        ||              t        |d      r|j                          y y # t        |d      r|j                          w w xY w)Nsetup_methodteardown_method)ry  rR  r   rS  )r   r7  instances      r3   r   z*Test64Bit._check_resiliency.<locals>.check,  sl    uHx0%%'/.+.08%67,,. 878%67,,. 8s   A A3rZ   )r   )r   r   r7  r   r   s        r3   _check_resiliencyzTest64Bit._check_resiliency(  s*     
!	&2	&	/ 
'	/ 	c;r5   zcls,method_namec                 ,    | j                  ||d       y )NrO   rD  rU  r   r   r7  s      r3   test_resiliency_limit_10z"Test64Bit.test_resiliency_limit_109  s    sKbAr5   c                 ,    | j                  ||d       y )NTrK  rW  rX  s      r3   test_resiliency_randomz Test64Bit.test_resiliency_random=  s    
 	sK=r5   c                 H    | j                  ||t        j                         y Nr[   )rU  rC   rS   rX  s      r3   test_resiliency_all_32z Test64Bit.test_resiliency_all_32D      sKRXXFr5   c                 H    | j                  ||t        j                         y r]  )rU  rC   r`   rX  s      r3   test_resiliency_all_64z Test64Bit.test_resiliency_all_64H  r`  r5   c                 ,    | j                  ||d       y )NT)r   rW  rX  s      r3   
test_no_64zTest64Bit.test_no_64L  s    sKdCr5   c                     t        t        j                  d      d        }t        t        j                        d        } |         |        y )Nr   )r[   rp   c                  P   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       y Nr   r_   r   rk  rH  r  r  r   r  )r   rk  r  r  )r   r   rm   r  r  r   r   r   s    r3   check_limitedz3Test64Bit.test_downcast_intp.<locals>.check_limitedW  s     QFQFQF34A.!((;.!%%a8Iy12A.!((;Iy12A.!((;r5   r^  c                      t        ddgddgddgg      } | j                  d       | j                  d       t        g d	g d
g      } | j                  d       t	        g d	g dg      } | j                  d       y rg  )r   r  r  r   r   r   s    r3   check_unlimitedz5Test64Bit.test_downcast_intp.<locals>.check_unlimitede  sv     QFQFQF34AHH!HEEqEMIy12AHH!HIy12AHH!Hr5   )r   rC   r`   )r   rh  rj  s      r3   test_downcast_intpzTest64Bit.test_downcast_intpP  sN     
!RXX12
4
	<
4
	< 
!RXX	6
	 
7
	 	r5   N)r   r   r   r   r   r   r   r   rG  r@  rB  rI  rO  rU  r   r  parametrizer;  rY  r[  r_  rb  rd  rk  rZ   r5   r3   r=  r=    s   z:z:NK-	E& " [[.>B ?B [[.>> ?> [[.>G ?G [[.>G ?G [[.>D ?D#r5   r=  r7   )NFNNF)T)	TTTTTTTTT)rr  
contextlibr  r  rg  r  sys
scipy._libr   numpyrC   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.linalgrt   r  ru   r   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,   scipy._lib._utilr-   r   r  r4   r<   	frozensetr}  rM   r	  r  r   r   r   r   r   r   r  r  r  r  r  r  contextmanagerrJ  rL  ra  ri  rz  r  r  r  r  r  r   r  r   rd  r  r  r
  r  r  r
  r  r  r  r   r%  r;  r=  rZ   r5   r3   <module>ry     s{        
      + + + +  9 9 9 9F F / / * +  ckk)/
'
 %eW- (  !   > " JN?DNb$ $6"$ "$H 8S7 S7l<d; d;No+ o+d% %.[ [|`K `KFT0 T0n B Bt$ t$n L  LFbK bKJ^0 ^0BZ= Z=z8 888 AE8<JN,0%'X{&! {&|    Q! Qh    _Buu= _BD    nu- nb    FMu(-e/45J FMR    <-ueE/45',u> <-~    fu(-e/45).0 fR    .B3 3l#5  37 3l	. 		. 	6 -,g -('BT| |r5   