
    xfX                       d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	Z
ddl	mZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlZddlmZmZmZmZmZm Z m!Z! ddl"m#Z$ ddl%Z&ddl'm(Z( ddl'm)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8 dd	l9m:Z:m;Z;m<Z< dd
l=m>Z> ddl"Z"dej~                  v Z@dYdZAd ZB eCdg      ZDd ZE e!       ZFeFj                  e       	 	 dZdZHd ZI G d d      ZJ G d d      ZK G d d      ZL G d d      ZM G d d      ZN G d d      ZO G d d       ZP G d! d"      ZQ G d# d$      ZRej                  d%        ZT G d& d'      ZU G d( d)      ZV G d* d+      ZW G d, d-      ZX G d. d/      ZY G d0 d1      ZZd[d2Z[	 	 	 	 d\d3Z\ G d4 d5 e\             Z]e]j                           G d6 d7 e\             Z_e_j                           G d8 d9 e\dd:            Z`e`j                           G d; d< e\d=            Zaeaj                           G d> d? e\ddddd@            Zbebj                           G dA dB e\dddddddC            Zcecj                           G dD dE e\ddddddF            Zdedj                          dG Ze G dH dI      Zf G dJ dKef      Zg G dL dMeg      Zh G dN dOehe]      Zi G dP dQehe_      Zj G dR dSeged      Zk G dT dUefeb      ZldV Zm G dW dX      Zny)]z Test functions for sparse matrices. Each class in the "Matrix class
based tests" section become subclasses of the classes in the "Generic
tests" section. This is done by the functions in the "Tailored base
class for generic tests" section.

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

csc_matrix
csr_matrix
dok_matrix
coo_matrix
lil_matrix
dia_matrix
bsr_matrixeyeissparseSparseEfficiencyWarning)supported_dtypesisscalarlikeget_index_dtypeasmatrixmatrix)spluexpminv)	decoratorzgoogle.colabc                 @    t        | |v ||       y | d|       y )Nz not found in )msg)r   )member
collectionr.   s      >/usr/lib/python3/dist-packages/scipy/sparse/tests/test_base.py	assert_inr2   1   s'    Fj S_clVJn]g\jBkl    c                 b    t        | j                  |j                  k(         t        | |fi | y N)r   dtyper   )xykwargss      r1   assert_array_equal_dtyper:   5   s&    AGGqwwq!&v&r3   dokc                 p    d } ||       D ](  } ||      D ]  }t        j                  ||      s  y * y)Nc                     g }| j                   j                         D ]>  }t        |t        j                  t        j
                  f      s.|j                  |       @ |S r5   )__dict__values
isinstancenpr
   genericappend)r7   arraysas      r1   _underlying_arraysz3sparse_may_share_memory.<locals>._underlying_arrays?   sO     ""$ 	!A!bjj"**56a 	! r3   TF)rA   may_share_memory)ABrF   rE   bs        r1   sparse_may_share_memoryrK   <   sI      " #A& 	A""1a(	 r3   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 r5   )r&   r   rA   iinfomaxint32r   intc)rD   maxvalcheck_contentstps       r1   new_get_index_dtypez4with_64bit_maxval_limit.<locals>.new_get_index_dtypec   s]     @B"))288BHH+=+A+ABB"((N3bBGGm4Ir3   c                     S r5    )rD   rS   rT   fixed_dtypes      r1   rV   z4with_64bit_maxval_limit.<locals>.new_get_index_dtypei   s	    r3     )seedc                 h    t         j                  t         j                  fj                  d         S )N   )rA   rQ   int64randint)rD   rS   rT   counters      r1   rV   z4with_64bit_maxval_limit.<locals>.new_get_index_dtypen   s$    HHbhh'(:;;r3   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   )
rA   rQ   r^   r   r6   size
issubdtypeintegerrP   min)rD   rS   rT   r6   arrminvalmaxval_limits         r1   rV   z4with_64bit_maxval_limit.<locals>.new_get_index_dtypeq   s    HHE!L(HHE %jjo99rxx'%88q=$]]399bjjA%(WWYF%(WWYF%,66\;Q (HHE% Lr3   c                 ~    | j                         kD  rt        d      | j                  t        j                        S )Nzdowncast limited)rP   AssertionErrorastyperA   intp)rg   downcast_maxvals    r1   new_downcast_intp_indexz8with_64bit_maxval_limit.<locals>.new_downcast_intp_index   s0    wwy?*$%788::bgg&&r3   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
_constructrC   getattrsetattr)funcrE   kwbackupmodulesmodnameoldfuncrn   ro   rV   s           r1   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#)rX   NF)rA   r^   randomRandomStater,   )	ri   r   rY   rn   assert_32bitr   r`   ro   rV   s	   ` ``  @@@r1   with_64bit_maxval_limitr   T   s     xx| xx-	
 
	 		))''T'2	<	* "	'
 0 0* Kr3   c                 p    t        | t        j                        st        |       r| S | j	                         S r5   )r@   rA   r
   r%   toarrayrE   s    r1   r   r      s'    !RZZ LO99;r3   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 rightrX   selfmats     r1   __add__zBinopTester.__add__       $r3   c                      yr   rX   r   s     r1   __mul__zBinopTester.__mul__   r   r3   c                      yr   rX   r   s     r1   __sub__zBinopTester.__sub__   r   r3   c                      yNmatrix on the leftrX   r   s     r1   __radd__zBinopTester.__radd__       #r3   c                      yr   rX   r   s     r1   __rmul__zBinopTester.__rmul__   r   r3   c                      yr   rX   r   s     r1   __rsub__zBinopTester.__rsub__   r   r3   c                      yr   rX   r   s     r1   
__matmul__zBinopTester.__matmul__   r   r3   c                      yr   rX   r   s     r1   __rmatmul__zBinopTester.__rmatmul__   r   r3   N)__name__
__module____qualname__r   r   r   r   r   r   r   r   rX   r3   r1   r   r      s*    %%%$$$%$r3   r   c                   N    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)BinopTester_with_shapec                     || _         y r5   _shape)r   shapes     r1   __init__zBinopTester_with_shape.__init__   s	    r3   c                     | j                   S r5   r   r   s    r1   r   zBinopTester_with_shape.shape   s    {{r3   c                 ,    t        | j                        S r5   )lenr   r   s    r1   ndimzBinopTester_with_shape.ndim   s    4;;r3   c                      yr   rX   r   s     r1   r   zBinopTester_with_shape.__add__   r   r3   c                      yr   rX   r   s     r1   r   zBinopTester_with_shape.__mul__   r   r3   c                      yr   rX   r   s     r1   r   zBinopTester_with_shape.__sub__   r   r3   c                      yr   rX   r   s     r1   r   zBinopTester_with_shape.__radd__   r   r3   c                      yr   rX   r   s     r1   r   zBinopTester_with_shape.__rmul__   r   r3   c                      yr   rX   r   s     r1   r   zBinopTester_with_shape.__rsub__   r   r3   c                      yr   rX   r   s     r1   r   z!BinopTester_with_shape.__matmul__   r   r3   c                      yr   rX   r   s     r1   r   z"BinopTester_with_shape.__rmatmul__   r   r3   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   rX   r3   r1   r   r      s9     %%%$$$%$r3   r   c                      e Zd ZdZeZed        Zd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej@                  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 ZayY)Z_TestCommonz6test common functionality shared by all sparse formatsc                     t        g dg dg dgd      | _        | j                  | j                        | _        | 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	_is_arraysetr$   unionmath_dtypeschecked_dtypes
dat_dtypesdatsp_dtypesrl   r   rA   float64r   )clsr6   s     r1   
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;	=r3   c                       fd}t         t              rt        j                  d        j                  D ]
  } ||        y )Nc                     j                   |    }t        t        t        |       t	        j                  dg             t	        j                  dg              y )Nr   r   )r   assert_raises
ValueErrorboolr   r   )r6   r   r   s     r1   checkz$_TestCommon.test_bool.<locals>.check  sH    %%e,E*dE2DNNA3'(s++,r3   z%Cannot create a rank <= 2 DOK matrix.)r@   TestDOKpytestskipr   r   r   r6   s   `  r1   	test_boolz_TestCommon.test_bool  s=    	- dG$KK?@(( 	E%L	r3   c                     t        ddgg      }| j                  |      }t        d      D ]  }||z   }||z   } t        ||j	                                y )NTFrM   )r   r   ranger   r   )r   r   r   _s       r1   test_bool_rolloverz_TestCommon.test_bool_rollover  sY     dE]O$s#r 	AEME)C	 	30r3   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   rA   nan)
r6   r   r   dat2datsp2datbsrdatcsrdatcscdatlilr   s
            r1   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r3   8Bool comparisons only implemented for BSR, CSC, and CSR.r   filterr#   sup_complexr@   TestBSRTestCSCTestCSRr   r   r   r   supr   r6   s   `   r1   test_eqz_TestCommon.test_eq)  sp    !

*+			B 
 
	B4 $'7 ;<KKRS(( 	E%L	r3   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   rA   r   )
r6   r   r   r   r   r   r   r   r   r   s
            r1   r   z"_TestCommon.test_ne.<locals>.checkR  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r3   r   r   r   s   `   r1   test_nez_TestCommon.test_neN  sp    !

*+			B 
 
	B8 $'7 ;<KKRS(( 	E%L	r3   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   rl   complexr    r   r   r   r:   r   rA   r^   errstater   r6   r   r   r   r   
datcomplexdatspcomplexr   r   r   r   valr   s               r1   r   z"_TestCommon.test_lt.<locals>.checky  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   `   r1   test_ltz_TestCommon.test_ltu  sq    !

*+		2	A 
 
2	Ah $'7 ;<KKRS(( 	E%L	r3   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               r1   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   `   r1   test_gtz_TestCommon.test_gt  sq    !

*+		1	A 
 
1	Af $'7 ;<KKRS(( 	E%L	r3   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   rl   r  r    r   r   r   r:   r   rA   r^   r  s               r1   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Br3   r   r   r   s   `   r1   test_lez_TestCommon.test_le  q    !

*+		-	C 
 
-	C^ $'7 ;<KKRS(( 	E%L	r3   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               r1   r   z"_TestCommon.test_ge.<locals>.check0  r  r3   r   r   r   s   `   r1   test_gez_TestCommon.test_ge,  r  r3   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    r1   
test_emptyz_TestCommon.test_emptyf  sW    T^^F+335uV}ET^^F+//3T^^F+99;Q?r3   c                    t        j                  | j                  j                               }t	        | j                  j                         |       t	        | j                  j
                  j                         |       y r5   )rA   r  r   r   r   T)r   expecteds     r1   test_count_nonzeroz_TestCommon.test_count_nonzerol  sQ    ##DJJ$6$6$89TZZ--/:TZZ\\//18<r3   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    r1   test_invalid_shapesz_TestCommon.test_invalid_shapesq  s2    j$..&9j$..&9j$..':r3   c                 .    t        | j                         y r5   )reprr   r   s    r1   	test_reprz_TestCommon.test_reprv  s    TZZr3   c                 .    t        | j                         y r5   )strr   r   s    r1   test_strz_TestCommon.test_stry  s    DJJr3   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   r0  rQ   float32r   	complex64
complex128r6   r]   )rA   r6   r   tocsctocsrtocoor   r   )
r   r   mytyperE   rJ   cr   efms
             r1   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	7r3   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   rH   s     r1   test_absz_TestCommon.test_abs  s<    ;
J	BCHSVS!23;;=>r3   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   rA   aroundroundr   r   )r   decimalrH   s      r1   
test_roundz_TestCommon.test_round  sR    E4=5%.137RYYq734>>!,g>FFH	Jr3   c                    t        g dg dg dgd      }t        t        j                  |d      | j	                  |      j                  d      j                                t        t        | j	                  |      j                  |       y )N)rD  r   )r   r   r   r]   r      r   r]   )r   r   rA   powerr   r   r   NotImplementedErrorrG  s     r1   test_elementwise_powerz"_TestCommon.test_elementwise_power  sd    <Y7=RXXa^T^^A%6%<%<Q%?%G%G%IJ 	)4>>!+<+B+BAFr3   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 )Nr?  rA  rC  rE  r   )TFF)FFT)r   r   r   r   r   rU  __neg__rG  s     r1   test_negz_TestCommon.test_neg  se    ;
J	BCHaR4>>!,,5578 ')=>?)4>>!+<+D+DEr3   c                     t        ddgg      }| j                  |      }t        |j                  j	                         |j                         y N      ?      @y       @      )r   r   r   realr   r   DrH   s      r1   	test_realz_TestCommon.test_real  ;    FF#$%NN1QVV^^%qvv.r3   c                     t        ddgg      }| j                  |      }t        |j                  j	                         |j                         y r[  )r   r   r   imagr   r^  s      r1   	test_imagz_TestCommon.test_imag  ra  r3   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   rS  r   r]   r   rS  krM   i)(   i?  rl  r   r   )   r   r   r0  )rC   r   r   r   r   r   r   diagonalr   rA   r   empty)r   matsr<  rowscols
sparse_matrk  s          r1   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+Fr3   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   rS  r0     )      	   r   r   )offsetr   )rA   r   r   r   r   trace)r   rH   rI   rk  s       r1   
test_tracez_TestCommon.test_trace  s    HHiI67NN1r1 	?A*AGG1G,=>	? HHi+,NN1r1 	?A*AGG1G,=>	?r3   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{  rE  rh  )r   r   r0  )CF))   r   )r   r  orderr   rM   r   r   r   r   r   r   r         rl  r]   rz  )r   rM   r   r   r   r   )r   r   r   r  r  rl  r]   r   )r   rz  r&  r]   rz  r   )
not_an_argr   rS  Tr   )
r   r   reshaper   r   r   	TypeErrorr   r   rc   )r   r7   r  sr8   desireds         r1   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^<r3   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   )rA   r   rf   r   r   r   r   r   )rE   vrk  nijdense_setdiags         r1   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) r3   c                    dt        t        j                  | |            ddfD ]9  }|dk  r*t        j                  j	                  t        dd            }n"t        j                  j                  dd|      } | ||       t               5 }|j                  t        d       |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  
       < y # 1 sw Y   xY w)Nr   r]   r  r   r   r  rc   ?Changing the sparsity structure of a cs[cr]_matrix is expensivez%s %derr_msg)r   rA   r   r   choicer   r_   r   r   r#   setdiagr   r   r   rf   rH   )
rE   rJ   rk  rr  r   r   r  r  r.   s
           r1   check_setdiagz=_TestCommon.test_setdiag_comprehensive.<locals>.check_setdiag  s:    #bggam,a4 Gq5		((q"6A		))!Ra)8AaA&&( $CJJ68yzIIaO$
 GGAqM::a=%%*&q!WQx5GHCFCF+A&q!uaeWQx=OP"1337c1X3EF'G$ $s   )E##E,	rZ   )ro  r0  r   r   r0  r0  r   r/  r   r4  r0  r  )rA   r   r[   r   r   r   r)  r   r   r  rf   r   )r   r  shapesr6   r<  r  ksrk  rE   rJ   k2r  r.   s              @@r1   test_setdiag_comprehensivez&_TestCommon.test_setdiag_comprehensive  s   	*	G2 			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	0r3   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   rS  rS  )r   r]   r   r  rS  rj  r   )r   r   r   )r   r]   r]   rg  r   )r   r   r   )r}  r]   r   r]   r}  r]   r   r   r   r   r   r   )r   r   r   r   )r   rA   r!   r   r   r#   r   r   r  r   rp  r   r   )r   r<  m2r?   r   s        r1   test_setdiagz_TestCommon.test_setdiagC  s   NN266!9%^^F#  	ACJJ.XZ*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/	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   rg  )r   r   r   nonzerotupler   r   rH   AspijA_nzAsp_nzs         r1   test_nonzeroz_TestCommon.test_nonzerob  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   rA   r  r  r   r  s         r1   test_numpy_nonzeroz_TestCommon.test_numpy_nonzerok  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    r1   test_getrowz_TestCommon.test_getrowu  sd    4::,,Q/779488QCF;KL4::,,R088:DHHbT1W<MNr3   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    r1   test_getcolz_TestCommon.test_getcoly  sd    4::,,Q/779488AsF;KL4::,,R088:DHHQW<MNr3   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 )
NrZ   r   r   r]   r   rD  r0  r{  r}  r0  )rl  rl  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)	Nr4  r  )overaxisr   r   r   r   )
r(   r   rA   r  r   sumr   r6   r   isscalar)r6   r  r   r   matricesr   s       r1   r   z#_TestCommon.test_sum.<locals>.check  s   !E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<)rA   r   r[   r(   randr   r   rs   r   r   r   r   )
r   dat_1dat_2dat_3dat_4dat_5r   r6   r  r  s
   `        @r1   test_sumz_TestCommon.test_sum}  s    
		t	""$ % 		q!$""Aq$/7795%6	O( (( 	 E3x=)  eQ 	 r3   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)rA   r   r   r   r   r   r  r  r   r  r   r   s       r1   test_sum_invalid_paramsz#_TestCommon.test_sum_invalid_params  sy    hhvY! " s#j%))!4i8i5j%))!=r3   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 Nr4  meanr   r   r6   r6   dat_mean
datsp_meanr   r   s      r1   r   z)_TestCommon.test_sum_dtype.<locals>.check  A    xxex,H%0J%h
;)9)9:r3   r   r   r   r   r   r6   r   r   s      @@r1   test_sum_dtypez_TestCommon.test_sum_dtype  M    Y! " s#	; (( 	E%L	r3   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   rA   r   r'   r   r   r   dat_out	datsp_outs        r1   test_sum_outz_TestCommon.test_sum_out  s    Y! " s#!,QC5M	Gd+		i	 !'95((6"RXXf-.	QGd3		qi	(!'95r3   c                     t        g dg dg dg      }| j                  |      }t        j                  |      }t        j                  |      }t	        ||       t        |j                  |j                         y Nr  r  r  )r   r   rA   r  r   r   r6   r   r   r   r  r  s        r1   test_numpy_sumz_TestCommon.test_numpy_sum  sa    Y! " s#66#;VVE]
!(J7X^^Z%5%56r3   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   rS  r0  )rz  r{  r}  r4  r  Tr  r  r   r   r   r   )	r   r   r   r  r   r6   r   rA   r  r6   r   r   r   s      r1   r   z$_TestCommon.test_mean.<locals>.check  s$   ""$+0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Lr3   )r   r   s   `  r1   	test_meanz_TestCommon.test_mean  s'    	M< (( 	E%L	r3   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'   rA   r   r   r   r   r   r  r  r  s       r1   test_mean_invalid_paramsz$_TestCommon.test_mean_invalid_params  s~    rxx'(Y! " s#j%**15i&9i#6j%**1#>r3   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      r1   r   z*_TestCommon.test_mean_dtype.<locals>.check  r  r3   r  r  s      @@r1   test_mean_dtypez_TestCommon.test_mean_dtype  r  r3   c                    t        g dg dg dg      }| 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   rA   r   r  s        r1   test_mean_outz_TestCommon.test_mean_out  s    Y! " s#!,QC5M	Wt,

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

y
)!'95r3   c                     t        g dg dg dg      }| j                  |      }t        j                  |      }t        j                  |      }t	        ||       t        |j                  |j                         y r  )r   r   rA   r  r   r   r6   r  s        r1   test_numpy_meanz_TestCommon.test_numpy_mean/  sa    Y! " s#773<WWU^
!(J7X^^Z%5%56r3   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)Nrf  r   r   r   rD  r0  rz  r  r   r6   )      @              ?)r         @r  )r  r  r  &splu converted its input to CSC formatCspsolve is more efficient when sparse b is in the CSC matrix format.spsolve requires A be CSC or CSR matrix format)r   floatr   rr   linalgr*   r   r   r#   r   r   r   )
r   MsMMexpNsNNexpr   sMexpsNexps
             r1   	test_expmz_TestCommon.test_expm<  s   9i4e<^^AU%^8||  #<|<=^^AU%^8||  #  	'CJJ.?AJJ.\^JJ.GI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)
Nrf  r  r  r  r  r  r  r  r   )r   r   r   r#   r   r+   r   r   r   rA   r!   r   r  )r6   r  r   r  sMinvr   s        r1   r   z#_TestCommon.test_inv.<locals>.checkS  s    y)Z8%@A"$  

2KM

2`b

2CE^^AU%^@B  &eiim&;&;&=rvvayI)S!,   s   A"CC&)r  r   s   `  r1   test_invz_TestCommon.test_invR  s"    	- W 	E%L	r3   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   rR  )r   r0  r   rE  )r\  r   r   )r         @r   int16r4  )r   r   r   r   rl   rG  s     r1   test_from_arrayz_TestCommon.test_from_arrayc  s    7777344>>!,446:#"  	4>>!,446:4>>!7>;CCEahhwFWXr3   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 r*  )r(   r   r   todenserl   rG  s     r1   test_from_matrixz_TestCommon.test_from_matrixn  s    Iy)Y?@4>>!,446:$#   	4>>!,446:NN1GN,4468I	
r3   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 r*  )r   r   r   r   rl   rG  s     r1   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	
r3   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 r*  )r   r   r   r   r   rl   r   r_  Ss      r1   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EqxxPWGXYNN14>>!,446:4>>!7>;CCEqxxPWGXYr3   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                  |u        t        t        j                  | j                   j                  | j                   j                              }| j                   j                  |      }t        | j                  |       t        | j                  |       t        ||u        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  r4  r  r  r  r  r  r  r        @)r   r0  r@   rA   r(   r   r   r   flagsc_contiguousf_contiguousr   r   r6   baser'   r   r   r   r   rl   )
r   chkr  rE   dense_dot_denser   rJ   check2spboolmatbools
             r1   test_todensez_TestCommon.test_todense  sq   jj  "#ryy)))3)		&&#))*@*@@Ajj  s +3)		&&'CII***+jj  s +3)CII***+		&&'hhtzz''tzz/?/?@jj  S )488S)488S)C rxx

 0 0

8H8HIJjj  S )488S)488S)s
:,dhh,DJJ&&((?E2=/"$$((Q,##%)?F35((//$'6>>+W5r3   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  r4  r  r  .r9  r:  )r   r   r   r   r   r   r<  r=  r>  rA   r   r   r6   r   r   r   r   rl   )r   r   r@  r  rE   rA  r   rJ   rB  rC  arrbools              r1   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5r3   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   rE  )TFr  FTc                     t        |       }t        |       }t        ||       t        ||u       d|j                  z  }||   }||    ||<   t        ||   ||   k7         |||<   y )N)r   )r~   r   r   r   )	attributerE   rJ   r  b_iS_castedS_copieds        r1   (check_equal_but_not_same_array_attributezI_TestCommon.test_astype.<locals>.check_equal_but_not_same_array_attribute   ss    Hi0Hi0"1a(
#166MdQ4x!!!%!r3   )csrcscbsr)indicesindptrdatacoo)rowcolrW  dia)offsetsrW  )	r   r   r$   rl   r   r6   r   formatr   )
r   r_  r6  r7   D_castedr   rQ  rM  rO  rP  s
           @@r1   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r3   c                    t        g dg dg dg      }| j                  |      }t        |d      rd|j                  j                  _        t        |d      rd|j                  j                  _        t        |d      rd|j                  j                  _        t        D ]D  }|j                  |      }|j                  |      }t        |j                  |j                         F y )NrJ  rK  rE  rW  FrV  rU  )r   r   hasattrrW  r<  	writeablerV  rU  r$   rl   r   r6   )r   r_  r6  r7   r^  rO  s         r1   test_astype_immutablez!_TestCommon.test_astype_immutable  s    ##  NN11f%*AFFLL"1h',AHHNN$1i (-AIIOO%! 	9Axx{Hxx{H8	9r3   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 )
Nrz  rQ   r4  r]   r   r   r-  r1  r3  )
r   r   r  r   r6   rA   asfptyper]  rl   r   )r   rH   rI   r  s       r1   test_asfptypez_TestCommon.test_asfptype'  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r3   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      r1   r   z*_TestCommon.test_mul_scalar.<locals>.check5  sW    //%(C%%e,Es1uuQw&7&7&9:s4x%*)=)=)?@r3   r   r   s   `  r1   test_mul_scalarz_TestCommon.test_mul_scalar4  '    	A %% 	E%L	r3   c                 B      fd} j                   D ]
  } ||        y )Nc                     j                   |    }j                  |    }t        d|z  d|z  j                                t        d|z  d|z  j                                y ri  rk  r  s      r1   r   z+_TestCommon.test_rmul_scalar.<locals>.check@  sW    //%(C%%e,Equqw&7&7&9:tCx$u*)=)=)?@r3   rl  r   s   `  r1   test_rmul_scalarz_TestCommon.test_rmul_scalar?  rn  r3   c                     | j                   t        j                     }t        t              5  d |z   d d d        y # 1 sw Y   y xY wr5   )r   rA   r   r   r  )r   r   s     r1   test_rmul_scalar_type_errorz'_TestCommon.test_rmul_scalar_type_errorK  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   r6  r6   r   r   rE   rJ   r9  r   s         r1   r   z#_TestCommon.test_add.<locals>.checkQ  s    //%(C%%e,E
AAcFAAAq!))+/2AGGIAqyy{ yy{QYY[8: AaDAq!))+!"45r3   rl  r   s   `  r1   test_addz_TestCommon.test_addP  s&    	6$ %% 	E%L	r3   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   rv  s         r1   r   z$_TestCommon.test_radd.<locals>.checkg  sW    //%(C%%e,E
AAcFAAAq!aiik/2r3   rl  r   s   `  r1   	test_raddz_TestCommon.test_raddf  s&    	3 %% 	E%L	r3   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   rS  r   r   r   r   r   r|  r   rB  r   )r   r   r   r   rA   r   r   r   r6   r   r   rH   r   s       r1   r   z#_TestCommon.test_sub.<locals>.checku  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|<r3   r   r   rA   r6   r   s   `  r1   test_subz_TestCommon.test_subt  s:    	=  %% 	E((%L	r3   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       r1   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|<r3   r   r  r   s   `  r1   	test_rsubz_TestCommon.test_rsub  s:    	=" %% 	E((%L	r3   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   )r6   r   r   rk  sumSsumDr   s         r1   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)rl  r   s   `  r1   	test_add0z_TestCommon.test_add0  s&    		6 %% 	E%L	r3   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)rS  r   r}  )r]   rQ  r0  )r   r{  r   )r   rD  r   y      ?       y              @y              y      @      y            @r0  y      @       @y      @      y             ?y              y             @r}  )r   r   r   multiplyr   )	r   rH   rI   r  Bspr  r_  CspDsps	            r1   test_elementwise_multiplyz%_TestCommon.test_elementwise_multiply  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;r3   c                    t        dg      }t        dgg      }t        g d      }t        g dg      }t        dgdgdgg      }t        g dg d	g d
g      }g d}t        j                  d      }|j                  }	t        dgg      }
t        ddgddggg      }| 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)NrS  r   r   r   )r{  r}  r  r   r]   r   )r|  rz  r   )rD  r   r]   )rz  rz  rz  rx  r  r   r   N)r   rA   onesr   r   r   r   r   r  r   r  r"   )r   rH   rI   r  r_  Er  GHJKLr  r  EspFspHspHsppJspJsppKspr  
spmatricesr  r  
dense_multsp_mults                              r1   #test_elementwise_multiply_broadcastz/_TestCommon.test_elementwise_multiply_broadcast  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         ?rQ  g      ?r   r  r  r  r  rx  )rQ  r]   r   r  )r   r   r   r  )divide)r  r  )rA   r   r   r   r   r   r(   r   r   r   r  )r   r!  denomrH   rI   r  r  s          r1   test_elementwise_dividez#_TestCommon.test_elementwise_divide   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   rS  r   )r   r0  r   r   )r   rz  r{  r|  r   r   r]   r   )r   g@r\  r   r   )r   r   rA   r  matrix_powerr   r   r   r6   r   	Exception__pow__)r   rH   rI   exponentret_spret_nps         r1   test_powz_TestCommon.test_pow#  s    <|\JKNN1! 	5H[FYY++Ax8Fv~~/8v||4		5 * 	:H)QYY9	: NN1RaRT7#iA.r3   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   ri  )r   r(   r   r   r   r   )r   r  rY  s      r1   test_rmatvecz_TestCommon.test_rmatvec5  s^    NN6779W"EFG!)a-Y		1LMYK !#'3+<=r3   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   rx  r   r   r   r   r   r   )r   r   r"   r   r   r   rA   r  rG  s     r1   test_small_multiplicationz%_TestCommon.test_small_multiplication;  s    NNQCQC=)U1X&'a%(l++-aS1#?Qs^U9%56Qu%uqcA3_'=>Q(%!qcA3*@AQ("''&/:r3   c                    | j                  dgdgdgg      }|j                  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  rx  r  r  )r   r   r   rA   r  r   r   rG  s     r1   .test_start_vs_at_sign_for_sparray_and_spmatrixz:_TestCommon.test_start_vs_at_sign_for_sparray_and_spmatrixG  s    NNQCQC=);;%a"''%.&8!<%a%!,&6:%a"''%.&8!<UA3Zy)9:UQC5\)51#sQC+ABRWWV_,bggfo>r3   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   rH   rI   s      r1   test_binop_custom_typez"_TestCommon.test_binop_custom_typeT  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2r3   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      r1   !test_binop_custom_type_with_shapez-_TestCommon.test_binop_custom_type_with_shapee  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2r3   c           	          | j                  t        g dg dg dg dg            }d}|j                  |      }||z  }t        |j	                         |j	                                y )Nr  r  r  r  rM   )r   r   r   r   r   )r   r  scalaractualr!  s        r1   test_dot_scalarz_TestCommon.test_dot_scalarr  sS    NN5'')G!DEFvv:((*:*:*<=r3   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                                |j                  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   rx  )
r   r   r   operatormatmulr   r   r   r   r   )r   r  rI   rZ  r  s        r1   test_matmulz_TestCommon.test_matmulz  ss   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{{%fQl&:&:&<q1uoo>OP%fQYY[!&<q1uoo>OP%fQ		&<q1uoo>OP 	j&!Q/j&!Q/r3   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  rx  )rS  r   r]   r   )rS  r   ri  )r   r(   r   r   r   r   r   r   r   r@   r
   rA   r   r   r   r   r'   )r   r  rZ  bad_vecsr7   s        r1   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Xr3   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                  |       |j                   rt        t        |j"                  |       y y )Nr  r  r  r  r   r   r]   r   r  g333333?r   rS  r0  rz  )r(   r   r   r   r   r5  r6  r7  r   r[   r   r   r   r   r   r   r   r   )r   rE   a2rJ   aspbspcspr9  wantr  fracrH   r  r  r  rI   s                   r1   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;;*aii3 r3   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   rS  r0  rz  rS  r]   )	r(   r   r   r   r@   typer   r   r   )r   rE   r  bsrJ   results         r1   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*		+r3   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 )Nrf  r   r   rS  )r0  r   r   r   r]   r   r   )rT  rX  rS  rR  r[  r;   lil              @_matrix)r   dense)	rs   r   r   r   asformatr   r]  r   eval)r   rH   r_  r]  rE   rJ   r9  s          r1   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$'	(r3   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   rS  r0  r  r   r   r0  )rT  to)r   r]   r   rz  )r   r]   r   rS  rz  r  	blocksize)r   r   r   r~   r   r   )	r   r7   r8   rH   r  r]  fnXYs	            r1   
test_tobsrz_TestCommon.test_tobsr  s    9Yy1277#$1InnQ 	DFdVm,B! D, DA q!f!5!=!=!?CDD	Dr3   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                 L   t        |   |       }j                  |      }|j                         }|j                         }t        |j	                         |       t        |j                         j	                         |       t        |j                  |j                         y r  )r   r   r   r   r   r   r6   )r6   r  r   r   rE   rJ   r  r   s         r1   r   z)_TestCommon.test_transpose.<locals>.check  ss    51CNN3'E!AAqyy{A.q{{}446<!''*r3   r  rS  r   r   )axes)r   rA   r   r   r   r   r   r   r   r   r   r   r   r   )r   r  r  r   rq  r6   r  r  s   `      @r1   test_transposez_TestCommon.test_transpose  s    "5>		+ v&2<<.668<<f6	8577??,eFm<j%//:(( 	 E3x=)  eQ 	 r3   c                 B      fd} j                   D ]
  } ||        y )Nc                     j                   |    }j                  |    }||z   }t        |||z          ||z   }t        |||z          y r5   )r   r   r   r6   r   r   sum1sum2r   s        r1   r   z)_TestCommon.test_add_dense.<locals>.check4  sQ    //%(C%%e,E ;DtS3Y/3;DtS3Y/r3   rl  r   s   `  r1   test_add_densez_TestCommon.test_add_dense3  s&    	0 %% 	E%L	r3   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 r5   )r   r   r6   r   r   r  s        r1   r   z)_TestCommon.test_sub_dense.<locals>.checkC  s    //%(C%%e,E yyD U{"4s3s{"4s3 c	C50"4s3-4"4s3r3   r   r  r   s   `  r1   test_sub_densez_TestCommon.test_sub_denseA  s:    	4$ %% 	E((%L	r3   c           	          t        j                  g dg dg dg      t        j                  g dg dg dg      t        j                  g dg dg dg       fd	} j                  D ]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   rS  r0  rE  )r   r   r]   )r   r   rz  r  )r   y      @       @r0  )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  rs   zHTaking maximum .minimum. with > 0 .< 0. number results to a dense matrix)rA   rd   complexfloatingr   rl   r  r   r   r   r#   maximumminimumr   r   r   r6   )r6   dtype2btyperH   rI   r   max_smin_smax_dmin_dA_denseA_dense_cpxB_denser   s             r1   r   z/_TestCommon.test_maximum_minimum.<locals>.checkb  sl   }}UB$6$67NN;#5#5e#<=NN7>>%#89 KKN)#KKO'!NN6*("NN7>>&#9: l""$ %

2eg 		!		!% JJwqz71:6Ewu~u5ekk2JJwqz71:6Ewu~u5ekk2% %s   &9G""G+)r  r	  r  rs   )rA   r   r   r   float_complex_r6   )r   r   r6   r  r  r  r  r  s   `    @@@r1   test_maximum_minimumz _TestCommon.test_maximum_minimum\  s    ((Iy)<=((Iy*=>hh	<FG	3> %% 	DE77BIIr{{; DE DE"((5/288F+;UCDD	Dr3   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   r]  	__class__r   r~   r   rK   )r   rH   toselfs      r1   	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9r3   c                     t        t        j                  d      j                  dd            }| j	                  |      }t        ||      D ]  \  }}t        |j                         |       ! y )N2   r0  rM   )r(   rA   r   r  r   zipr   r   )r   rI   rH   r7   r8   s        r1   test_iteratorz_TestCommon.test_iterator  sX    299R=((B/0NN11I 	)DAqa(	)r3   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 )Nrm  r  ro  r  r  r0  rz  )r   r  rA   r  r   r   r   r   r   r   r  r   )r   r   rE   rJ   r9  r   r:  r;  r  r  r  dspespfsps                 r1    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3r3   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 )Nrm  ro  r  )r   r  r   r   r7  r   r6  r5  toliltodoktobsr)r   r   rE   rJ   r9  r<  spms          r1   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	9r3   c                 r     dd l t               }|j                  t               | fd       } |        y )Nr   c                  d   j                   j                         } t        j                        D ]  }j	                  j                  | |            }t        | j                  |j                         t        | j                         |j                                t        | j                  |j                         | j                  j                         D ]T  \  }}t        |t        j                        rt        ||j                  |          :t!        ||j                  |   k(         V  y )N)protocol)r   r   r   HIGHEST_PROTOCOLloadsdumpsr   r   r   r   r]  r>   itemsr@   rA   r
   r   )r   r.  sploadedkeyr
  pickler   s        r1   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x'8'8'= =>	?	?r3   )r5  r   r   r#   )r   r   r   r5  s   `  @r1   test_picklez_TestCommon.test_pickle  s4    !

*+		? 
	? 	r3   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  rS  r0        4@)r   r   r   r   r   r~   rA   r   r  r   r   )r   ufuncr  X0X2r   s        r1   r   z5_TestCommon.test_unary_ufunc_overrides.<locals>.check  s    v~ / 0~~*j!99CDB%Eryy}44Q:S@AAqyy{#BqBrzz|R0r3   )sintanarcsinarctansinhtanharcsinharctanhrintr9  expm1log1pdeg2radrad2degfloorceiltruncsqrtrF  rX   )r   r   r   s   `  r1   test_unary_ufunc_overridesz&_TestCommon.test_unary_ufunc_overrides  s"    	1 	D $K		r3   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   rS  r]   r   r   r   r   r   r   r   r   r]   r   r   r]   r   r]   r]   r  r+  )r]   r   r   rE  )r   )r   r]   r  rx  )	rA   r   r   r   resizer   r   r   r   )r   r_  r6  	bad_shapes       r1   test_resizez_TestCommon.test_resize  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	:	;r3   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  )r6   r   T)rR  rS  rX  r[  r;   r  )r   r]  r  r:   r   NON_ARRAY_BACKED_FORMATSr   rK   r6   rA   r1  r   r  )r   rH   self_formatr  other_formatrI   s         r1   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		7r3   N)br   r   r   __doc__r$   r   classmethodr   r   r   r   r   r  r  r  r  r  r"  r'  r*  r-  r=  rH  rO  rV  rY  r`  rd  rv  r  r  r   markslowr  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r$  r(  r   r.  r1  r3  r7  rE  rH  r_  rc  rf  rm  rq  rs  rw  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r%  r+  r6  rO  rX  r]  rX   r3   r1   r   r      sd   @"K= =4	1#J%N=~<|8t8t@=
;
7$?JGF/
/
GB?*=X [[50 50nA>##OO! F
> 6(7 D
? 6(7A," Y Y 

 

 

 

 Z Z*'6R#6J &H &HP 9 9"		
,02<*5=n!DF/$>
;?3"3>0,Y<64p+(2
D 66(DT:0)84t9(*";H7r3   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                         }|j
                  r5t        t        t        j                  ||j                         ||z  }||z  }nJt        t        t        j                  ||       |j                  |j                        }||j                  z  }t	        ||       t        t        t        j                  ||       y )Nr  )rA   r  r   r   r   r   r   r   r  imulr   r   r  	ifloordiv)r   rE   rJ   r7   r8   s        r1   test_inplace_densez)_TestInplaceArithmetic.test_inplace_dense^  s   GGFONN1FFHFFH	Q	Q1a FFHFFH	Q	Q1a FFHFFH;;*hmmQ<AAFA *hmmQ:acc
AHA1a  	i!3!3Q:r3   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]   rj  	r   r   rA   can_castintr   r   r   r  r6   r   r   rE   rJ   r   s        r1   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 >r3   rl  r   s   `  r1   test_imul_scalarz'_TestInplaceArithmetic.test_imul_scalar~  s&    	3& %% 	E%L	r3   c                       fd} j                   D ]/  }t        j                  |t        j                        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 rj  rm  rp  s        r1   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 >r3   )r   rA   rn  int_r   s   `  r1   test_idiv_scalarz'_TestInplaceArithmetic.test_idiv_scalar  s:    	3$ %% 	E ;;ubgg.e		r3   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 )Nr0  )	r   rA   r!   r   r   r   r  r  rf  )r   rE   rJ   bps       r1   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:r3   N)r   r   r   rg  rq  ru  rx  rX   r3   r1   rc  rc  ]  s    ;@.2;r3   rc  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 )Nr+  rS  r   r   r   r]   r   rE  r4  r  r   r   r$  )rS  r   r  )rS  r   rx  )
r   r   r   r   r   r  r   
IndexErrorr  __getitem__)	r6   r_  rH   r  r  r  r  r  r   s	           r1   r   z*_TestGetSet.test_getelement.<locals>.check  s    w  (-.A q!A''CAaA2q\ 1r1 1A 1Q31Q3011 afu-B Jz95q}}bIJr3   r$   rA   r6   r   s   `  r1   test_getelementz_TestGetSet.test_getelement  s*    	J$ & 	#E"((5/"	#r3   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  r4  r  r   rm  r;  r   r]   r   r  r  r  r|  r   r   r{  r   r   r0  )r   r0  r   r|  )r   r   rS  r   )r]   r   r{  r   ))r   rS  )r   rS  r  r  r%  g     ^@rx  )r  )r   r   r   r#   r  rA   bool_r   r   r   r  __setitem__r   r   rd   r
  r  )r6   rH   r   r  r  r   s        r1   r   z*_TestGetSet.test_setelement.<locals>.check  s   uE2A"$ 	(

2\^**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 & =7	( 	(s   B#F22F;r  r   s   `  r1   test_setelementz_TestGetSet.test_setelement  s+     	FD & 	#E"((5/"	#r3   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   rM   r4  r  r   )r   rD  )r   r   r   r#   r   r6   rH   r   r   s      r1   r   z9_TestGetSet.test_negative_index_assignment.<locals>.check	  s^    we4A"$ 

2\^% 51%	 s   AAr  r   s   `  r1   test_negative_index_assignmentz*_TestGetSet.test_negative_index_assignment	  s/    	& %% 	#E"((5/"	#r3   c           	           d\   fd}dddt        d      dfdt        d      ft        d      t        d      ffD ]  \  }} |||d        y )	Nr0  rM   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.   rH   r   r<  r  r   s	         r1   	_test_setz3_TestGetSet.test_scalar_assign_2.<locals>._test_set	  s    EQEVJ/C1v&A"$ 

2\^!Q$  =!Q$C8 s   A??Br]   r   r   r|  r  r   r   r   )r   r   r  r  r  r<  r  s   `   @@r1   test_scalar_assign_2z _TestGetSet.test_scalar_assign_2	  s_    1	9 WhrB"eBiBir+- 	DAqaA	r3   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)Nr/  r  r   r  rS  r  r}  r   rA   r   r   r   r#   r   r   r   rH   rI   r   r  s        r1   test_index_scalar_assignz$_TestGetSet.test_index_scalar_assign!	  s    NN6"HHV  	CJJ.XZV ###	 	199;*	 	s   /BBN)r   r   r   r  r  r  r  r  rX   r3   r1   rz  rz    s    #,$#L#$
+r3   rz  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   r4  r   r  r  )rA   r   r[   r   r  r  r   r   r   r   r   r   r#   r)   solver   )r   r  rH   r7   r8   r  r  r   s           r1   
test_solvez_TestSolve.test_solve/	  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  rX   r3   r1   r  r  .	  s    %r3   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   rM   r4  r   r   r0  )r   r   rA   r-  r6   rQ   r1  r   r   s    r1   test_dtype_preservationz$_TestSlicing.test_dtype_preservationF	  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Wr3   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 )NrT  r4  r   r]   rA   r-  rQ   r1  r   r   r   r6   r   dtrH   s      r1   #test_dtype_preservation_empty_slicez0_TestSlicing.test_dtype_preservation_empty_sliceL	  s     88RXXrzz2::> 	0BvR0A1a!e8**B/1Qq5!8**B/1a!e8**B/1Qq5!8**B/	0r3   c           	      0   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@r0  rM   r   r]   r   r]   r   rS  r   rz  rE  rg  r   rS  r   r   r      rz  r{  )r'   r   r  r   r   r   r(   rH   r   r  r  slicer   rI   rH   r  r_  r  r  s          r1   test_get_horiz_slicez!_TestSlicing.test_get_horiz_sliceV	  si   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ikk2 	j!--%+r1BCj!--!U1a[1ABr3   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  r0  rM   r]   r   r   r  r  rE  rg  r   r  r  r   r  rz  r{  )
r   r  r   r   r   r   r   r  r  r  r  s          r1   test_get_vert_slicez _TestSlicing.test_get_vert_slicej	  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Br3   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  r0  rM   r]   r   r   r   r   r  r  rE  rg  )r   r  r   r   r   r   )r   rI   rH   r  r  s        r1   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8r3   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)	rA   r   r  r   r   r   r   r   r   )r   v0r  s      r1    test_non_unit_stride_2d_indexingz-_TestSlicing.test_non_unit_stride_2d_indexing	  s    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  r0  rM   r  r  r  r   r   r]   r   rS  r}  r   rB  )	r'   r   r  r   r   r   r   r  r   )r   rI   rH   r  s       r1   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&	2r3   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  r0  rM   r]   r   r   rn  r  r|  r   rS  r   r   rB  rQ  c                     |    }|    }|j                   dk(  rt        ||t        |              y |j                  dk(  r|j                  dk(  ry t	        |j                         |t        |              y NrX   r   )r   r   r)  rc   r   r   )rE   r7   r8   rH   rI   s      r1   check_1z,_TestSlicing.test_slicing_3.<locals>.check_1	  s^    !A!Aww"}Q47+66Q;166Q;&qyy{AtAw?r3   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  )
r@   rA   r
   ro  r   r   r)  rc   r   r   )rE   rJ   aibir7   r8   rH   rI   s         r1   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|Dr3   )
Nr   r   r]   r0  rn  r   r   r0  i)r'   r   r  r   rA   s_r   r   	enumerate	itertoolsproductrC   r  )r   r  slicesr  r  rE   r  r  rJ   extra_slicesr9  rH   rI   s              @@r1   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	r3   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  r0  rM   .).)r   .).r   r   )r   r   .)r   .r   )r'   r   r  r   r   r   rH   r   r   rJ   rE   s      r1   test_ellipsis_slicingz"_TestSlicing.test_ellipsis_slicing
  s{   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<0r3   c                    t        t        d      j                  dd            }| j                  |      }t	        j
                  d      5  t        |d   j                         |d d d d f   j                         d d d        t	        j
                  d      5  t        |d   j                         |d d d d f   j                         d d d        t	        j
                  d      5  t        |d   j                         |d	d d f   j                         d d d        t	        j
                  d      5  t        |d	d d
d
f   j                         |d	d d d f   j                         d d d        t	        j
                  d      5  t        |d
d
d	d f   j                         |d d d	d f   j                         d d d        t	        j
                  d      5  t        |d   j                         |d d d	f   j                         d d d        y # 1 sw Y   xY w# 1 sw Y   ZxY w# 1 sw Y   x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  r0  rM   zremoved in v1.13match)..)...)r   ..r   .)..r   )	r'   r   r  r   r   deprecated_callr   r   rH   r  s      r1   test_multiple_ellipsis_slicingz+_TestSlicing.test_multiple_ellipsis_slicing
  s   VBZ''"-.NN1##*<= 	Aq{224a1gii@	A##*<= 	Fq/7791QT799E	F##*<= 	Dq~5571a4C	D##*<= 	FqS#668!ABE(**E	F##*<= 	Fqc12668!AqrE(**E	F##*<= 	Dq~5571a4C	D 	D	A 	A	F 	F	D 	D	F 	F	F 	F	D 	DsH   1H1H$*/H176H>6I
/IH!$H.1H;>I
IIN)r   r   r   r  r  r  r  r  r  r  r  r  r  rX   r3   r1   r  r  E	  s;    X0C(C*9	<+3Z@D1$Dr3   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)	Nr/  r  r   r   rS  r   r}  r   r  r  s        r1   test_slice_scalar_assignz+_TestSlicingAssign.test_slice_scalar_assign+
  s    NN6"HHV  	 CJJ.XZ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#   rA   r   r   r   )	r  r  r.   rH   r   rI   r<  r  r   s	         r1   r  z9_TestSlicingAssign.test_slice_assign_2.<locals>._test_set<
  s    qe4u%C1v&A"$ 

2\^!Q$ !Q AAadG%aiik1cB s   BBr]   r   rM   rS  r0  r   )r  r   r  s   `   @@r1   test_slice_assign_2z&_TestSlicingAssign.test_slice_assign_29
  sl    1		C q]QdB(:$;aq"=NAha-/ 	DAqaO	r3   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]   rm  r{  r  r   r]   r   rM   r  r   r   r   )	r   r   r   r#   r   rH   rA   r   r   )r   rI   r   rH   s       r1   test_self_self_assignmentz,_TestSlicingAssign.test_self_self_assignmentK
  s;    NN5!  	7CJJ.XZAcFAcFAcFAcFBAqsVAacFq1vxx1Q32BArr"1"uXAacFrxx37=BA1vxxAcrc!eHq1vxxzz1SbSU8::6%	7 	7 	7s   DD22D;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  rM   r   r   )r   r   rz  )r      r   rE  r   r   rS  r  r0  rm  r   r  r{  r  r]   )r   r   r   r   r#   r   r   r   )r   rI   r!  blockr   s        r1   test_slice_assignmentz(_TestSlicingAssign.test_slice_assignmentc
  s    NN5!(!"!# $ A!u  
	;CJJ.XZ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  r0  rm  r   r  r{  r  rM   r  r+  r  rg  r  )
r   r   r   r#   r   rA   r!   r   r   r   )r   rI   r   r!  s       r1   "test_sparsity_modifying_assignmentz5_TestSlicingAssign.test_sparsity_modifying_assignmentw
  s    NN5!  	*CJJ.XZ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   rS  r   r0  r   rB  rQ  r  rM     rm  d   rx  r  ri  )rS  r   r   r   r]   rS  )r   r   r   rR  )r   r   r   r  rA   r  r   r   r   r#   r  r   r   r)  r   r   r   r   r  listr  r   )
r   rH   rI   r  r  r   r  rE   r  rJ   s
             r1   test_set_slicez!_TestSlicingAssign.test_set_slice
  sb   NN6"%'(UURa&"Qq'2ab62add8QqV*bBiEQrEQ1r!AwB)RWWR[*
   	/CJJ.XZ!&) <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.'	/, 	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&	(E	/ 	/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   rg  )r   rA   r  r   r   r  s      r1   test_assign_emptyz$_TestSlicingAssign.test_assign_empty
  sL    NN2776?+NN6"!RaR%199;I(>?r3   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 )Nr  r   r   r   r  rE  )r   rA   r  r   r   r   r   rH   r7   s      r1   test_assign_1d_slicez'_TestSlicingAssign.test_assign_1d_slice
  sV    NN2776?+HHQK!Q$!Q$199;Iy(IJr3   N)r   r   r   r  r  r  r  r  r  r  r  rX   r3   r1   r  r  *
  s-    +$70;(2,(\@Kr3   r  c                   L    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)_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 )NrT  r4  F)FFFr  r  s      r1   #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,	-r3   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 )Nr0  foor]   r  rx  ri  )r   rA   r   r   r  r   r  r  rG  s     r1   test_bad_indexz!_TestFancyIndexing.test_bad_index
  sh    NN288QF+,z:y91==%Pz:y91==*Uz:. ,/	1r3   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  r0  rM   r   r   r   r]   rB  )r]   r|  r   r   rS  r}  rD  r|  rQ  r   r4  )r'   r   r  r   r   r   r   r  r   rA   ro  )r   rI   rH   r  r  s        r1   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<r3   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 )NrZ   r  rz  rS  r  r   r  )rA   r   r[   r'   r  r  r_   r   r"   r   r   r   r  r  )r   NUM_SAMPLESr  r  r_  Ir  r6  SIJI_badJ_bads              r1   test_fancy_indexing_randomizedz1_TestFancyIndexing.test_fancy_indexing_randomizedA  s	   
		tRYY^^Aa()KK1s7#IIqb1fak:IIqb1fak:NN1!fC=++-CS!AaC&!AAj!--%;j!--!E;r3   c                 H   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                  g              t        t        |j                  |       t        t        |j                  |       t        t        t         f|j                  |df       y )NrZ   r  r0  rM   r   r]   r  r4  r  r}  )TFTTF)
FTTFTFFFFF)rz  r  Tr  )r   r   r   )rA   r   r[   r'   r   r  r   r   r_   r   r   r   r   r   r  r  r   )	r   rI   rH   r  r  r  Z1Z2Z3s	            r1   test_fancy_indexing_booleanz._TestFancyIndexing.test_fancy_indexing_boolean[  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QrUBHHRL)j!--4j!--4z:.1vFr3   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 )NrZ   r  r0  rM   r   r]   r  r  r4  r}  )r0  r  )rz  rM   r   )rA   r   r[   r'   r   r  r   r   r_   r   r   r   r   r   r  r  r   )	r   rI   rH   r  XspZr  ZspYsps	            r1   "test_fancy_indexing_sparse_booleanz5_TestFancyIndexing.test_fancy_indexing_sparse_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Hr3   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 )Nr+  r  r   r   )r   r   rA   ravelr  r   r   )r   r   desired_colss      r1   #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Nr3   c           	          | j                  t        ddgddgg            }t        t        |j                  dt        j                  ddg             y )Nr   r   rm  r]   )r   r   r   r   r  rA   r   s     r1   test_fancy_indexing_seq_assignz1_TestFancyIndexing.test_fancy_indexing_seq_assign  s@    nnUQFQF#345j#//6288QqE?Kr3   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      r1   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  r0  rM   r   r   r]   r   rz  FFFFFr4  r   r   r]   r   rS  	r'   r   r  r   rA   r   r   r   ro  r   rI   rH   r  r  s        r1   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/r3   N)r   r   r   r^  r  r  r  r  r
  r  r  r  r  r  rX   r3   r1   r  r  
  s@    -1h=T<4G@I.O
L<0r3   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)ra  r!  rU  r   sort_indicesr   )r  rU  s     r1   check_remains_sortedr#    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 )Nr0  r  r]   r  )r   rA   r   r   r  r   r  r  rG  s     r1   test_bad_index_assignz._TestFancyIndexingAssign.test_bad_index_assign  sQ    NN288QF+,z:y91==%QRSz:y91==*VWXr3   c                 L    d\   fd}dt        d dd      ft        j                  d      t        dd      ft        d	d      t        dd      ffD ]  \  }} |||        t        j                  d      t        j                  d      fd
fD ]  \  }} |||        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'   rA   r   r   r   r#   r#  r   r   )r  r  rH   rI   r   r<  r  r   s        r1   _test_set_slicezI_TestFancyIndexingAssign.test_fancy_indexing_set.<locals>._test_set_slice  s    1v&A1a&)*A"$  

2\^!Q$)!,  AadG 	  &aiik15   	   s#   )B'(B0B'B$	 B''B0rR  rM   rS  r   r0  r   r]   )r  r  )r  rA   r   r   r+  r  r  r<  r  s   `   @@r1   test_fancy_indexing_setz0_TestFancyIndexingAssign.test_fancy_indexing_set  s    1		6  tR!34iilE!RL1Aqk5B<02 	"DAq Aq!	" iilBIIaL13IJ 	"DAqAq!	"r3   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)
Nr/  r4  r  r   r   r]   r  rS  rU  )r   r   r   r#   r  r   r  r  s      r1   r   zD_TestFancyIndexingAssign.test_fancy_assignment_dtypes.<locals>.check  s    vU3A"$ G

2\^!&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   `  r1   test_fancy_assignment_dtypesz5_TestFancyIndexingAssign.test_fancy_assignment_dtypes  s*    
	G & 	#E"((5/"	#r3   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   rS  r  r  r   r   r]   r  rM   r  rE  )r   rM   r  rT  r  ry  rx  )rx  r  rz  )r   r!   r   r   r   r#   r#  r   r   r   r'   rA   r   r   r  )r   rH   rI   i0i1i2r   r  s           r1   test_sequence_assignmentz1_TestFancyIndexingAssign.test_sequence_assignment  s   NN5!NN3q8$2Y  $	/CJJ.XZ%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.I$	/ $	/$ $# #' '2 24 4?$	/ $	/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  r0  rM   r   r   r]   r  r  *   r4  r  r  r  s        r1   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#r3   N)r   r   r   r'  r-  r0  r5  r8  rX   r3   r1   r%  r%    s    Y
"*# ,/\$r3   r%  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   rS  r]   rx  rS  r0  rz  r   r]   r   r   rZ   r0  r{  )rA   r   r   r[   r'   r  r   r"   r   r   r   r  r  r  )	r   setsr  r  r_  r6  r  r  r  s	            r1   test_fancy_indexing_ndarrayz._TestFancyMultidim.test_fancy_indexing_ndarray6  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r3   N)r   r   r   r@  rX   r3   r1   r:  r:  5  s    Lr3   r:  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
NrZ   r0  r{  r]   r   rx  r<  r=  r>  )rA   r   r[   r'   r  r   r   r#  r   r   r   r  r  )	r   r_  r6  r  r  r  r  r  r  s	            r1   test_fancy_assign_ndarrayz2_TestFancyMultidimAssign.test_fancy_assign_ndarrayY  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r*  )
r   r#  r   r   r#   r'   rA   r   r   r   )r  r  rH   r   rI   r<  r  r   s        r1   r+  zR_TestFancyMultidimAssign.test_fancy_indexing_multidim_set.<locals>._test_set_slice}  s    1v&A%a( *;*= 

2\^!Q$  1a&)*AAadG%aiik15   s"   B'B	B'B$	 B''B0r   r]   r   r   rS  rx  r   r]   rS  )r   rS  r   )rS  r   r]   )rA   r   r,  s   `   @@r1    test_fancy_indexing_multidim_setz9_TestFancyMultidimAssign.test_fancy_indexing_multidim_setz  s    1	6 hhAA/01a&91a&)QFQF+;<#Y/)Y1GHJ 	"DAq Aq!	"r3   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 rD  )rA   r   r[   r'   r  r   r   r   r   r  r  )r   r_  r6  r  r  r  r  iir  r  jjr  r  s                r1   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 )NrZ   r0  r{  )r   r]   r   r   rS  r]   )r0  rz  r   r]   r   r   )r   r]   r   rS  r0  rz  r{  )rA   r   r[   r'   r  r   r   r   r  r  r  )r   r_  r6  r  r  rK  r  rL  r  C1C2s              r1   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   rE  rI  rM  rQ  rX   r3   r1   rB  rB  X  s    ?B"$?:Kr3   rB  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   rB  g      @)g     ,@g      r   r   rV  r   )r   g      @r   r   r   r   )g     2@      r   r   r   r   r3  )g      ?r   r   r   rz  g      )rU       @r   r   r   g      @)r   rX  r   r   r   r   )rW  r   r   r   r   r      rQ   )
r   _TestArithmetic__A_TestArithmetic__Brc  r   rl   r]  r   _TestArithmetic__Asp_TestArithmetic__Bspr   s    r1   __arith_initz_TestArithmetic.__arith_init  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-
r3   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   rZ  r[  r$   rA   r  rl   r   rd   r
  r]  r   r6   	r   r7   rH   r  r8   rI   r  D1S1s	            r1   test_add_subz_TestArithmetic.test_add_sub  s    	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]  r   r   rZ  r[  r$   rA   r  rl   r   rd   r
  r]  r   rF  rP   r   r6   ra  s	            r1   test_muz_TestArithmetic.test_mu  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`  rd  rg  rX   r3   r1   rS  rS    s    ..)/V0r3   rS  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  r4  r0  rS  r      r   iir   rM   r   r]   rm  r   rM   rM   r   )rA   r1  r   rQ   r^   r3  r   r  r   r   rf   rP   r6   r   r  r   r   )r   r6   r_  r  r  s        r1   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! NN288A;'QUUWa QUUWa QUUW]]AGG, IIb&..q3!A#q&	NN1QUUWa QUUWb! ((6"BHHW$5rxx7HI 	-Aq!A*aee,*aee,	-r3   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  r0  rM   r   r   r}  r  r   rU  r   r   r   r   r  Tr  3   )rM   r0  r   rl  r  rm  r  )rA   r   r  r   r   rP   r   rf   r   r   r   )r   r_  r  r  r  	axes_evenaxes_odds          r1   test_minmax_axisz_TestMinMax.test_minmax_axisL  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r3   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  r0  rM   r4  r   r   r}  r  r   rU  r  )r   rS  rp  r  )r(   rA   r   r  r  r   r   nanmaxr  nanminr@   r   r   r   )	r   r_  r  X_nan_maximumX_nan_minimumr  r  X_nan_maximaX_nan_minimas	            r1   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		5r3   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  )rf   rP   r   r  r  r  r   r  )r   r   r~   r   r   r  )r   r   r   fnamer   s        r1   test_minmax_invalid_paramsz&_TestMinMax.test_minmax_invalid_params  sv    Y! " s## 	;E5%(D*d3)T7)T4*d:	;r3   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   r@   _minmax_mixinr   rA   rf   rP   )r   r  r   r   s       r1   test_numpy_minmaxz_TestMinMax.test_numpy_minmax  sy     	'Y! " s# eU001rvve}bffSk:rvve}bffSk: 2r3   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   r0  r]   r   )r   r   r   r   )r   r   rQ  rD  ri  )r   r]   r   r   rS  r   r{  r0  )r0  r0  r   )rS  r}  rM   )r   rS  r}  r  r   r   ro  r  rb   )Nr   )r  r  rA   r   r   r   r@   r  r   argmaxargminr'   r  rq  r   r   )
r   r  rb  D2D3D4D5r_  r   r  s
             r1   test_argmaxz_TestMinMax.test_argmax  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<	=r3   N)	r   r   r   rn  rt  r|  r  r  r  rX   r3   r1   ri  ri    s#    --^?MB5<;;$,=r3   ri  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   r0  r  r}  r  r   r   r   )r   rl   r   r   rA   rQ   r^   r   r  getnnzr2   r6   r   r   )r   r   bool_datr   accepted_return_dtypess        r1   test_getnnz_axisz _TestGetNnzAxis.test_getnnz_axis  s   aVV!W  ::d#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7r3   N)r   r   r   r  rX   r3   r1   r  r    s    8r3   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  )rU  r  r   r  AttributeErrorr   r   )rE   r   fcs     r1   wrapperz6_possibly_unimplemented.<locals>.wrap.<locals>.wrapper  sF    Aq<B<'+Y
"N4 A ++&?@@As    4?)	functoolswraps)r  r  s   ` r1   wrapz%_possibly_unimplemented.<locals>.wrap  s'    __R A !A Nr3   test_NotImplemented)dictr>   r2  
startswithr  r   	__bases__)r   requirer  new_dictr   r   s         r1   _possibly_unimplementedr    s    
 
		 %,,,,. 	,JD$w'!%d	, CLL#33MM 	r3   c	                 N   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 ]m  }|j                  D ]\  }|j                  d      s|
j!                  |      }|0t#        dj%                  |j&                  ||j&                              ||
|<   ^ o 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 {} overloads test {} defined in {}TestBase)r   r  rz  r  rc  rS  r  r  r  r%  r:  rB  ri  r  r>   r  getr   r]  r   r  )getsetslicingslicing_assignfancy_indexingfancy_assignfancy_multidim_indexingfancy_multidim_assignminmaxnnz_axisbasesnamesr   r   old_clss                 r1   sparse_test_classr  1  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" !P!W!WLL$(8(8": ; ;E$K	 
E2&&r3   c                       e Zd Zed        Zej                  ej                  ej                  ej                  gZ
d Zd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Z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   argsr9   r   s       r1   r   zTestCSR.spcreator^  ?      	/CJJ.UWt.v.	/ 	/ 	/   !6?c                 p   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   rS  r   r  r~  r   )rS  r   r]   r  r  r   rR  )r   r   r   rW  r   rU  rV  r   r  	getformatr   r   rJ   r  s      r1   test_constructor1zTestCSR.test_constructor1f  s    9"$ m!#((733;;w/3::i0SZZ\!$S]]_U+3;;=!,r3   c                     t        dd      }d|d<   t        |      }t        |j                  dg       t	        |j
                  dg       t	        |j                  g d       t        |j                         |       y )Nrz  rz  r   r0  r  rS  )r   r   r   r   r   r   r   )r   r   r   rW  r   rU  rV  r   r  s      r1   test_constructor2zTestCSR.test_constructor2r  s^    %#m!#((A3/3;;s+3::o6!#++-3r3   c                    t        ddgddgddggd      }t        |      }t        |j                  g d       t	        |j
                  g d       t	        |j                  g d       t        |j                         |       y )	Nr   r   r]   r   r   rx  r  r  )r   r   r   rW  r   rU  rV  r   r  s      r1   test_constructor3zTestCSR.test_constructor3{  sm    Aq6q6q6! m!#((733;;w/3::i0!#++-3r3   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                                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  r;  g      &@r  g       @g      @r,  r  r  rS  r   l           r   r   r4  )	r   r	   r   r   r   r  r   rA   uint64)r   rY  rZ  rW  r  rR  r  s          r1   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#++-0r3   c                     t        g d      }t        g d      }t        g d      }t        |||f      }t        |j                  d       y Nr   r   r   r   r   r0  r   r]   ri  r  )r   r   r   r   r   rV  rU  rW  rR  s        r1   test_constructor5zTestCSR.test_constructor5  ?    y!	"Y$01399U+r3   c                     g d}g d}g d}t        |||f      }t        |j                  d       t        t	        j
                  |j                  t        j                               y r  )r   r   r   r   rA   rd   r6   signedintegerr  s        r1   test_constructor6zTestCSR.test_constructor6  sM    $01399e,cii)9)9:;r3   c                    t        d      dz   }t        g dt        j                        }t        g dt        j                        }t	        |||fd      }t        g dg d	g d
gd      }t        |j                  j                  t        j                  t        j                               t        |j                  j                  t        j                  t        j                               t        |j                         |       y )Nrz  r   )r   r]   r   r   r   r]   r4  r   r]   rS  rz  r  r   r  r}  )r0  r   rz  r   )r   r   rA   r^   r   r   rV  r6   rQ   rU  r   r   )r   rW  rZ  ptrrE   rJ   s         r1   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;*r3   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 )	Nrz  r   r  r   r]   r4  r  r   )r   rA   rO   rQ   rP   r   r^   r   r   rV  r6   rU  r   r   )r   rW  largerZ  r  rE   s         r1   test_constructor_largecolz!TestCSR.test_constructor_largecol  s    ay1}"&&,Q1eU1WeAg6bhhGL1c3'(QXX^^RXXbhh%78QYY__bhhrxx&89177QC
O4r3   c                 .   t        d      }t        g d      }t        g d      }t        |||fd      }|j                         }|j	                          t        |j                  g d       t        |j                         |j                                y )Nr0  r{  r]   r   r0  rS  r   r   r0  r]   rM   r  r   r]   r{  rS  r0  )r   r   r   r   r"  r   rU  r   r   rW  rU  rV  r  r  s         r1   test_sort_indiceszTestCSR.test_sort_indices  sm    ay(y!$0?hhj3;;73;;=#++-8r3   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   rS  r0  rz  r{  r|  r   r   r|  r  r  r   rx  )r   r   r   eliminate_zerosr   r  rW  r   r  s         r1   test_eliminate_zeroszTestCSR.test_eliminate_zeros  ~    -.01y!$0?hhj377A&388I.3;;=#++-8r3   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  rS  r0  r:  r>  r?  r@  rA  rB  rC  rD  rE  rF  r9  rG  rH  rI  rJ  rK  rL  rM  rN  T)r   rA   r   r  r   ra  r~   r   r   rU  rV  r   r   r  r;  r=  s       r1   test_ufuncszTestCSR.test_ufuncs      ryy},,Q2S89J 	JA Q/6AB"((+qyy"**5qxx3rzz|^WR^AIIK-HI	Jr3   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 )	Nr0  r  r  r  r  rz  r|  r   r0  r{  r]   rS  r   r]   rz  )r   r   r   r   r   r  s         r1   test_unsorted_arithmeticz TestCSR.test_unsorted_arithmetic      ay(y!$0?ay*+y!$0?cCi((*CKKMCKKM,IJr3   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   r<  rZ   r0  r{  
rA   r   r   r[   r'   r  r   r"   r   r   r   r  r  r_  r6  r  s         r1   test_fancy_indexing_broadcastz%TestCSR.test_fancy_indexing_broadcast      HHqcA3_%HHY
		tRYY^^Aq)*NN1!fC=++-CS!AaC&!r3   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)rA   r   r   r   r   r!  r@   r   r"  r   rU  )r   sorted_indsunsorted_indsrW  rV  r  s         r1   test_has_sorted_indiceszTestCSR.test_has_sorted_indices  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4r3   c                    t        t        j                  dg      t        j                  dg      t        j                  ddg      f      }t        d|j                         t        j                  ddg      }t        j                  ddg      }t        j                  ddg      }t        |||f      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   rA   r   r   has_canonical_formatr   r@   r   sum_duplicatesr   rU  )r   r  rU  rW  rV  s        r1   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'r3   c                     t        j                  dt         j                        }t        j                  dt         j                        }t        j                  d      }t        |||fd      }t        |||fd      }t        j                  dt         j                        }t        ||fd      }t        ||fd      }t        d      }	t        d      }
t	        |j
                  j                  t         j                         t	        |j
                  j                  t         j                         t	        |j
                  j                  t         j                         t	        |j
                  j                  t         j                         t	        |	j
                  j                  t         j                         t	        |
j
                  j                  t         j                         |||||	|
fD ]  }||z    	 y )Nr]   r4  r   r   r  r           r  )rA   r   rQ   r   r   rV  r6   r^   r   rV  rU  valsrE   rJ   r  r9  r   r:  r;  r7   s               r1   test_scalar_idx_dtypezTestCSR.test_scalar_idx_dtype6  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	r3   c                     t        g d      }t        g d      }||z   j                  dk(  sJ |j                  |      j                  dk(  sJ y )Nr  r   r   r   r]   r   )r   r  r  r   rE   rJ   s      r1   test_binop_explicit_zerosz!TestCSR.test_binop_explicit_zerosN  sJ     y!y!A{{azz!}  A%%%r3   N)r   r   r   r_  r   rA   r  rt  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rX   r3   r1   r   r   ]  s    / /
 88RWWbii=K
-441 ,<+ 59	9
J	K"58(:0&r3   r   c                       e Zd Zed        Zej                  ej                  ej                  ej                  gZ
d Zd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Z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       r1   r   zTestCSC.spcreator[  r  r  c                 |   t        g dg dg dgd      }t        |      }t        |j                  g d       t	        |j
                  g d       t	        |j                  g d       t        |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]   r  rS  rS  )r   r   r   rW  r   rU  rV  r   r  r   r  r  s      r1   r  zTestCSC.test_constructor1c  sz    <|<cBm!#((953;;y13::k2SZZ\!$SYYqww'S]]_U+r3   c                     t        dd      }d|d<   t        |      }t        |j                  dg       t	        |j
                  dg       t	        |j                  g d       y )Nr  r   r0  )r]   rS  r]   )r   r   r   r   r   r   r   )r   r   r   rW  r   rU  rV  r  s      r1   r  zTestCSC.test_constructor2m  sN    %#m!#((A3/3;;s+3::o6r3   c                     t        ddgddgddggd      }t        |      }t        |j                  ddg       t	        |j
                  ddg       t	        |j                  g d       y )Nr   r   r]   r   r  )r   r   r   rW  r   rU  rV  r  s      r1   r  zTestCSC.test_constructor3u  s\    Aq6Aq6Aq6*C0m!#((Aa513;;!u-3::g.r3   c                     t        g d      }t        g d      }t        g d      }t        ||f      }t        ||fd      }t        t	        d      j                  dd      |j                                y )Nr  r  r  r  r  rS  r   )r   r	   r   r   r   r  r   )r   rY  rZ  rW  r  rS  s         r1   r  zTestCSC.test_constructor4|  sb    5656CDSI$r5)6":--a3S[[]Cr3   c                     t        g d      }t        g d      }t        g d      }t        |||f      }t        |j                  d       y Nr  r  ri  )rz  r   )r   r   r   r   r   rV  rU  rW  rS  s        r1   r  zTestCSC.test_constructor5  r  r3   c                     g d}g d}g d}t        |||f      }t        |j                  d       t        t	        j
                  |j                  t        j                               y r  )r   r   r   r   rA   rd   r6   r  r  s        r1   r  zTestCSC.test_constructor6  sM    $01399U+cii)9)9:;r3   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  rM   r]   r  r   rx  )r   r   r   r  r   r  rW  r   r  s         r1   r  zTestCSC.test_eliminate_zeros  r  r3   c                    t        d      }t        g d      }g d}t        |||fd      }|j                         }|j	                          t        |j                  g d       t        |j                         |j                                y )Nr0  r  r  r  r  r  )r   r   r   r   r"  r   rU  r   )r   rW  rY  r  r  r  s         r1   r  zTestCSC.test_sort_indices  sh    ayO$$S)8hhj3;;73;;=#++-8r3   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   rA   r   r  r   ra  r   r~   r   r   rU  rV  r   r  s       r1   r  zTestCSC.test_ufuncs  r  r3   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 )	Nr0  r  r  r  r  rz  r  r  )r   r   r   r   r   r  s         r1   r  z TestCSC.test_unsorted_arithmetic  r  r3   c                    t        j                  dgdgdgg      }t        j                  g d      }t         j                  j                  d       t	        t         j                  j                  dd            }| j                  |      }|||f   }t        |      r|j                         }t        ||||f          y r  r  r  s         r1   r  z%TestCSC.test_fancy_indexing_broadcast  r  r3   c                     t        j                  dt         j                        }t        j                  dt         j                        }t        j                  d      }t        |||fd      }t        |||fd      }t        j                  dt         j                        }t        ||fd      }t        ||fd      }t	        d      }	t	        d	      }
t        |j                  j                  t         j                         t        |j                  j                  t         j                         t        |j                  j                  t         j                         t        |j                  j                  t         j                         t        |	j                  j                  t         j                         t        |
j                  j                  t         j                         |||||	|
fD ]  }||z    	 y )
Nr]   r4  r   )r  r   r  )r  r   r  r  r  )	rA   r   rQ   r   r   r   rV  r6   r^   r	  s               r1   r  zTestCSC.test_scalar_idx_dtype  r  r3   N)r   r   r   r_  r   rA   r  rt  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  rX   r3   r1   r   r   Z  ss    / /
 88RWWbii=K,7/D,<	99
J	K"r3   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rM   rM   rM   r  r  r0  rz  )r   r   r  r   rH   )r   rH   r_  r  s       r1   	test_multzTestDOK.test_mult  sJ    w##accEaccE133$r3   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 )
NrT  r  r  r  rM   r   r  r  )r   r   r   r   r  s      r1   test_add_nonzerozTestDOK.test_add_nonzero  sz    NN5!##FB7RHr2h/0199;*FF199;*r3   c                     | j                  d      }d|d<   d|d<   t        |dz  j                         |j                         dz         t        |dz  j                         |j                         dz         y NrT  r+  r  r  r  r  r}  r   r   r   rG  s     r1   test_dok_divide_scalarzTestDOK.test_dok_divide_scalar  s_    NN5!##AbD>>+QYY[^<AaC==?AIIKM:r3   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)rz  r{  r   r  r]   r  r   r  rS  r  r0  r  rz  r  )	r   r   r   r   r5  r   r   r   r6  )r   r<  r  rE   rS  rJ   rR  s          r1   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;r3   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  r4  )r   r  r   r   r   r6   r   r   rA   r1  r   )r   rJ   rH   r9  rW  r   das          r1   	test_ctorzTestDOK.test_ctor,  s    i, <|<cBqMQWWagg&QYY[!$ qMQYY[!))+.9%t2::.QWWbjj)YY[RXXrzz*2t$r3   c                     t        d      }d|d<   t        d|j                         vd       t        d      }d|d d df<   t        t        |j                               dk(  d       y )Nr  r   rm  zUnexpected entry (0,0) in keyszUnexpected entries in keys)r   r   keysr   r  s      r1   test_ticket1160zTestDOK.test_ticket1160A  s`    u# 	QVVX%'GH u!A#AFFH"$@Ar3   N)r   r   r   r   r   rA   rt  r  r  r   r)  r,  r0  r2  r5  r8  rX   r3   r1   r   r     s>    I77BIIr{{3K%
+;<>%*Br3   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                  z  j                                y )Nr'  rM   r  y              4@r(  r4  ppc64le)r   rA   r3  r   platformmachiner   r   r   r   r  r  s      r1   test_dotzTestLIL.test_dotV  s    (BMM*$$xr}}5$$ *q133wQSS(9(9(;<1q{{}.QSS0A0A0CDr3   c                 t    t        d      }d|d<   |dz  }t        |d   d       |dz  }t        |d   d       y )Nr  r]   rm  rS  r   )r   r   )r   r7   s     r1   test_scalar_mulzTestLIL.test_scalar_mule  sC    v$aCQtWa aCQtWa r3   c                     | j                  d      }d|d<   d|d<   t        |dz  j                         |j                         dz         t        |dz  j                         |j                         dz         y r.  r/  rG  s     r1   test_truediv_scalarzTestLIL.test_truediv_scalaro  sc    NN6"$$AF++-qyy{R/?@AE??,aiikAo>r3   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   r4  )皙?rI  rI  r   )
r   r2  r   r~   r   r   rA   r6   r   squeeze)r   rH   rI   rW  opotherr!  r  s           r1   test_inplace_opszTestLIL.test_inplace_opsw  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:r3   c                     g dg dg}t        t        |            }t        |      D ]-  \  }}t        |j	                         t        ||   d             / y )Nrx  ry  r]   )ndmin)r   r   r  r   r   )r   row_datarI   r  rY  s        r1   test_lil_iterationzTestLIL.test_lil_iteration  sN    y)uX'l 	KFAss{{}eHQKq.IJ	Kr3   c                     t        d      }d|d<   d|d<   d|d<   d|d	<   d
|d<   |j                         }t        |      }t        |j                  |j                         y )Nr'  rM   r  r  r(  r  )r|  r   rl  )r   r|  r  )r|  r}  )r   r6  r   rH   )r   rI   r  r_  s       r1   test_lil_from_csrzTestLIL.test_lil_from_csr  sa     x $$$$$GGIqM133$r3   c                     t        t        d      j                  dd            }t        |      }t	        |t        g d      ddf   j                         |t        g d      ddf          y )Nr  r0  rx  r]   r   )r'   r   r  r   r   r   r   )r   r  rH   s      r1   test_fancy_indexing_lilzTestLIL.test_fancy_indexing_lil  sb    VBZ''1-.qMQuY'1,-557uY'1,-	/r3   c                    t        d      }d|d<   d|d<   d|d<   d|d	<   t        d      }d|d<   d|d
<   d|d<   d|d	<   d|d<   t        |j                  |      j                         |j                  |      j                                t        |j                  |      j                         g dg dg dg dg       y )Nr  r   rm  r]   r  r   rU  rS  r  r  rT  r+  rE  r   r   r}  )r   rY  r   )r   r   r  r   )r   lr<  s      r1   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%%%&(	)r3   c                 \    t        t        j                  d            }|dz  }d|dd d f<   y )Nr  r  r   )r   rA   r  )r   rE   s     r1   test_lil_multiply_removalz!TestLIL.test_lil_multiply_removal  s*    rwwv'	R!Q$r3   N)r   r   r   r   r   rA   rt  r  r  r   r?  rA  rC  rM  rQ  rS  rU  rY  r[  rX   r3   r1   r:  r:  R  sN    I77BIIr{{3KE!?;(K%/).r3   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ej                   j#                  dd      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 r  )r   r   r   r   r  r   rA   r  )r   rY  rZ  rW  rX  r  s         r1   r  zTestCOO.test_constructor1  s    5656CD$Cy)%06":--a3S[[]C 9a.Aq6Aq6*:;299M	1~1v.bii@5#++-0r3   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}  rD  r0  r{  r   r   r]   r   rB  r  )rS  r   r   rW  )rQ  r{  r   )r   r   r   r   )r   rY  rZ  rW  rX  r   s         r1   r  zTestCOO.test_constructor2  sY    )*)*-.$Cy)%0ZJ783.r3   c                    t        d      }t        |j                  d       t        |j                  g        t        |j                  g        t        |j
                  g        t        |j                         t        d             y )Nr  )r   r   r   rY  rZ  rW  r   r   r   rX  s     r1   r  zTestCOO.test_constructor3  sX    399U+3772&3772&388B'3;;=%-8r3   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   rS  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   rX  s      r1   r  zTestCOO.test_constructor4  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   r4  )r   r6   rA   r   )r   rW  rX  s      r1   "test_constructor_data_ij_dtypeNonez*TestCOO.test_constructor_data_ij_dtypeNone  sB    s$!qc
+48yyBHHTN00000r3   FzCOO does not have a __getitem__runreasonc                      y r5   rX   r   s    r1   r   zTestCOO.test_iterator	      r3   c                 l    ddgg}t        |      j                         }t        |j                  |       y rb   )r   todiar   rH   )r   r   r[  s      r1   test_todia_all_zeroszTestCOO.test_todia_all_zeros  s.    Q%%'355%(r3   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   rH   rY  rZ  rW  ra  s     r1   test_sum_duplicateszTestCOO.test_sum_duplicates  s    1Q%1Q%!A01355Aa5!A-01Q%1Q%!A01355Aa5!A-0377QC(377QC(388aS)r3   c                     t        g dg dg dff      }|j                         }t        |j                  |j                         y )N)r   r   r   r   )r   r]   r]   r   )r   r   r   r   )r   r(  r   rH   )r   rX  r;   s      r1   test_todok_duplicateszTestCOO.test_todok_duplicates  s3    )i%;<=iik355#%%(r3   c                 @   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   rW  allr   rH   )r   rW  rY  rZ  r  r  s         r1   r  zTestCOO.test_eliminate_zeros$  sz    -.,-,-$c
+6:hhjQ##%&355#%%(r3   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   rW  rA   rG   )r   rg   	new_shaper7   r8   s        r1   test_reshape_copyzTestCOO.test_reshape_copy.  s    lO<	sOIIi !&& !IIieI,!&& !IIidI+B''778r3   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{  rz  r  r  r   r  )r   r   r  r  )r   mat1mat2s      r1   test_large_dimensions_reshapez%TestCOO.test_large_dimensions_reshape<  s     A3'TF 34oFA3$' 34oF 	oS9TAFF!KLoS9TAFF!KLr3   N)r   r   r   r   r   rA   rt  r  r  r   r  r  r  r  rg  r   r`  xfailr   ro  rq  rs  r  rx  r~  rX   r3   r1   r]  r]    s     I77BIIr{{3K1	/96*1
 [[5)JK L)
*)
)9	Mr3   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   rS  )r   r]   r   r   )r   r   r   rS  ri  r   r   r  r   r   r]   r  r  )r   rA   repeatr   r   r   )r   r_  rW  r\  s       r1   r  zTestDIA.test_constructor1Q  sj    <! " xx$++A1+5((8$Zwv>FFH!Lr3   FzDIA does not have a __getitem__rh  c                      y r5   rX   r   s    r1   r   zTestDIA.test_iteratorZ  rl  r3   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]   rj  rS  )	r   rA   r!   r   r\  r6   rQ   r  r^   r   r<  s     r1   test_setdiag_dtypezTestDIA.test_setdiag_dtype^  s    rvvay!QYY__bhh/			$!	QYY__bhh/rvvay!QYY__bhh/			$!	QYY__bhh/r3   zDIA stores extra zerosrj  c                      y r5   rX   r   s    r1   r  zTestDIA.test_getnnz_axisj  rl  r3   c                     t        g dgdgfd      }|j                         }t        |j                         j                         |       t        |j	                         j                         |       y )Nr  r   r  r  )r   r   r   r5  r6  )r   r<  r!  s      r1   test_convert_gh14555zTestDIA.test_convert_gh14555n  sT    bT*&999;1779,,.91779,,.9r3   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   rS  r   )
r   r7  rA   ravel_multi_indexrY  rZ  r   ru  diffr  )r   r<  	flat_indsinds_are_sorteds       r1   test_tocoo_gh10050zTestDIA.test_tocoo_gh10050u  st    AA'(..0((!%%A	&&!3a!78%%888r3   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 )	Nri  r   r   r  r  r4  r  r  )rA   r   r  rQ   rs   	dia_arrayr7  rZ  r6   r6  rU  r5  )r   rW  r\  r[  rX  rR  rS  s          r1   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,,,r3   N)r   r   r   r   r   rA   rt  r  r  r   r  r   r`  r  r   r   r  r   r  r  r  r  rX   r3   r1   r  r  K  s     I77BIIr{{3KM [[5)JK L Q	0  	0 [[56 7:9-r3   r  )r  r  r  r  r  r  r  c                      e Zd ZeZej                  ej                  ej                  gZ	d Z
d Zd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zej,                  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]   rS  )r   r]   r]   r   )rS  r]   r   r  r  r   rH  )rz  r   rM   r   )r   rS  r|  )r  r   r  r]   )r   r0  rM   )rn  r   r  r   r  r  r  rz  r  r  )r   r   r   r    r   r   )r   rV  rU  rW  rH   r  s         r1   r  zTestBSR.test_constructor1  s    y!	"W~"$ %Q#% &Q$& 'Q$& 'Q )Ii0772CD$wv.V<S[[]A& $wv./S[[]A&r3   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  )rM   rS  )r   r{  r  )rS  rz  rU  r  r  r  r  r  r  r  r  r  r  r  )r]   r  )r   r  rc  )r   r   r    r   r   )r   r   rH   s      r1   r  zTestBSR.test_constructor2  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<<>Br3   c                     g dg dg dff}t        ddgddgg      }t        t        |d	      j                         |       y )
Nrx  r  rg  r   r   r]   r   rU  r  )r   r   r    r   )r   argrH   s      r1   r  zTestBSR.test_constructor3  sA    '*+Aa5!A- Zv6>>@!Dr3   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   r4  r   F)r  r   )rA   r  r   r   rQ   r   r    )r   r  rW  rV  rU  s        r1   r  zTestBSR.test_constructor4  sf     ww1ay01a&1))ARXX.D'6*q!f5Ir3   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  )rA   r  r   r   r   r   r    )r   r  	data_1dimrW  rV  rU  s         r1   r  zTestBSR.test_constructor5  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]   r4  r  r  )rA   r   rQ   r    r6   )r   r?   rV  rU  rJ   s        r1   test_default_dtypezTestBSR.test_default_dtype  s    3*sQCj)1a&1((Aq620FCww"((6*00000r3   c                 $   t        g d      }t        g d      }t        d      }t        g dg dg      |d<   t        g dg dg      |d	<   t        g d
g dg      |d<   t        g dg dg      |d<   t        g dg dg dgg dg dg      }t        |||fd      }|j	                         }|j                         j	                         }t        |j                         |       t        |j                         |j                                y r  )r   r   r   r    r6  r7  r   r   )r   rV  rU  rW  rH   AbsrAcsrAcsr_via_coos           r1   test_bsr_tocsrzTestBSR.test_bsr_tocsr  s    |$%Y"$ %Q#% &Q$& 'Q$& 'Q ,l;Y')4&1Azz|zz|))+T\\^Q'T\\^\%9%9%;<r3   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  )rS  r  r  r  )
r   r   r  r   r    r   r  r   r  r   r  s         r1   r  zTestBSR.test_eliminate_zeros  s    ,!uaUm<>>||Bq#01y!$0?hhj377C(3;;=#++-8r3   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  rE  )rA   r   r[   r    rW  r  r   r  r   r   r   r   r  s     r1   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;(:;r3   c                     t        t        d      j                  dd      d      }t        |j                  d         j                  dd      }t	        ||z  |j                         |z         y )Nx   r|  rn  rS  r0  r  r   r   r    r   r  r   r   r   r  s      r1   test_bsr_matveczTestBSR.test_bsr_matvec(  sV    vg..s375I1771:&&r!,QqS!))+/*r3   c                     t        t        d      j                  dd      d      }t        |j                  d   dz        j                  dd      }t	        ||z  |j                         |z         y )	Nr  r|  rn  r  r  r   rz  r   r  r  s      r1   test_bsr_matvecszTestBSR.test_bsr_matvecs-  sZ    vg..s375I1771:a< ((A.QqS!))+/*r3   FzBSR does not have a __getitem__rh  c                      y r5   rX   r   s    r1   r   zTestBSR.test_iterator2  rl  r3   zBSR does not have a __setitem__c                      y r5   rX   r   s    r1   r  zTestBSR.test_setdiag6  rl  r3   c                 ,   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 )NrQ  rR  rS  r  r  rT  r   r   r]   r   rU  r  r  r  r  )	rA   r   r   r   rV  r   rH   r   r   r5  s      r1   test_resize_blockedzTestBSR.test_resize_blocked:  s
   HHl""$ % NN1N/ D()133!Q"#Q"#Q!) 	* 	
133!Q"#Q!) 	*	133!Q"#Q"#Q!) 	* 	
133!-!-!/ 	0 	j!((F3r3   c                      y r5   rX   r   s    r1   r  z"TestBSR.test_setdiag_comprehensiveQ  rl  r3   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]   r4  r   r  r  r  r  )r   r   r  )r   r   r  )
rA   r   rQ   r    r   rV  r6   r^   MemoryErrorr   )r   rV  rU  r
  rE   rJ   r9  r   vals2vals3r:  r;  r7   s                r1   r  zTestBSR.test_scalar_idx_dtypeU  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   rA   rt  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r   r`  r  r   r  r  r  skipifIS_COLABr  rX   r3   r1   r   r     s	    I77BIIr{{3K'.C0EJB(1=.	9<.+
+
 [[5)JK L [[5)JK L4. [[5)JK L [[)?@ Ar3   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 matrixrV  Nr   r]   r  r   c              3   &   K   | ]	  }|d      ywr  rX   ).0ps     r1   	<genexpr>z&_same_sum_duplicate.<locals>.<genexpr>  s     ,QAaD,s   c              3   >   K   | ]  }|j                  d         yw)r]   N)r  )r  rU  s     r1   r  z&_same_sum_duplicate.<locals>.<genexpr>  s     7w"7s   )
poprA   rd   r6   r  unsignedintegerr  r  rc   r  )rW  indsr9   rV  	zeros_pospospos1pos2s           r1   _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~!--r3   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   rH   r  rc   r   r   r#   _insert_explicit_zero_arg1_for_noncanonicalr   r6   rA   r1  r2  r   r   rW  any)r   r_  sorted_indicesr9   	constructr  zero_pos	has_zerosrk  r   arg1NCr  r  s                r1   r   z_NonCanonicalMixin.spcreator  sO    G%	a"6"CC1H%%'a[%%)	  !#A"$ R

2\^..q(1+a.(1+a.QR
 **1n=& ggF7Ot&v& 88

BLL11
 DDacc- RWW\&&() 	5R Rs   "6EEz"bool(matrix) counts explicit zerosr  c                      y r5   rX   r   s    r1   r   z_NonCanonicalMixin.test_bool  rl  r3   z!getnnz-axis counts explicit zerosc                      y r5   rX   r   s    r1   r  z#_NonCanonicalMixin.test_getnnz_axis  rl  r3   znnz counts explicit zerosc                      y r5   rX   r   s    r1   r  z_NonCanonicalMixin.test_empty  rl  r3   F)r   r   r   r   r   r`  r   r   r  r  __classcell__)r  s   @r1   r  r    s    $L [[AB C [[@A B [[89 :r3   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)rV  r   Nr   )r  rW  rU  rV  r  r   )r   r  r  rW  rU  rV  startstops           r1   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$$r3   c                     d|||f<   |S rb   rX   r   r  r  r  s       r1   r  z2_NonCanonicalCompressedMixin._insert_explicit_zero  s    !A#r3   Nr  )r   r   r   r  r  rX   r3   r1   r  r    s    %r3   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 )Nr+  r}  r~  rE  r4  )r  r  )	r   r   r   r   r   r   r  r  r  )
r6   r  r_  rH   r  r  r  r  r  r   s
            r1   r   z3_NonCanonicalCSMixin.test_getelement.<locals>.check  s    w  (-.A q@A''CAaA2q\ 1r1 1A 1Q31Q3011 C Jz95q}}bIJr3   )FTr  )r   r   r6   r  s   `   r1   r  z$_NonCanonicalCSMixin.test_getelement  s;    	J  & 	7E"/ 7bhhuo~67	7r3   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   rx  r   r  r]   )
rA   r!   r   r   r   r   r#   r   r  r   )r   r_  rH   rI   r   s        r1   test_setitem_sparsez(_NonCanonicalCSMixin.test_setitem_sparse  s    FF1INN1NNG9%!A#  	CJJ.XZAacF	 	199;*""$!A#  	CJJ.XZSSAacF	 	199;*	 		 	s    D*D&D#&D/Fz(inverse broken with non-canonical matrixrh  c                      y r5   rX   r   s    r1   r(  z_NonCanonicalCSMixin.test_inv  rl  r3   z&solve broken with non-canonical matrixc                      y r5   rX   r   s    r1   r  z_NonCanonicalCSMixin.test_solve  rl  r3   N)
r   r   r   r  r  r   r`  r  r(  r  rX   r3   r1   r  r    s`    7*+& [[5)ST U [[5)QR Sr3   r  c                       e Zd Zy)TestCSRNonCanonicalNr   r   r   rX   r3   r1   r  r        r3   r  c                       e Zd Zy)TestCSCNonCanonicalNr  rX   r3   r1   r  r    r  r3   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  )r6  r)  r  )r   r  r  r  r7   s        r1   r  z)TestBSRNonCanonical._insert_explicit_zero  s/    GGI!A#www--r3   Fz&diagonal broken with non-canonical BSRrh  c                      y r5   rX   r   s    r1   rv  z!TestBSRNonCanonical.test_diagonal"  rl  r3   z"expm broken with non-canonical BSRc                      y r5   rX   r   s    r1   r$  zTestBSRNonCanonical.test_expm&  rl  r3   N)	r   r   r   r  r   r`  r  rv  r$  rX   r3   r1   r  r    s[    .
 [[5)QR S [[5)MN Or3   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  rW  rY  rZ  )r   r  r  rW  rY  rZ  s         r1   r  z*TestCOONonCanonical._arg1_for_noncanonical,  s1    ,QVVQUUAEEBc3c3Zr3   c                    t         j                  |j                  j                  j	                  d      |j                  f   |_        t         j                  |j
                  j                  j	                  |      |j
                  f   |_        t         j                  |j                  j                  j	                  |      |j                  f   |_        |S rb   )rA   r_rW  r6   r  rY  rZ  r  s       r1   r  z)TestCOONonCanonical._insert_explicit_zero1  s    qvv||((+QVV34aeekk&&q)15501aeekk&&q)15501r3   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   rj  r   )	r   rA   r!   r  r  r   ru  r  rZ  r  s     r1   test_setdiag_noncanonicalz-TestCOONonCanonical.test_setdiag_noncanonical7  sf    NN266!9%				1a&A		rwwquu~*+,r3   r5   )r   r   r   r  r  r  rX   r3   r1   r  r  +  s     
-r3   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  r  r~  r  r  r  r  ra  Fr  z3.6.0
pytestmark)r  r   r  xslow)marks)r   r]  r   r   r  r   r:  sorteddirr~   r  r  r   r   r`  r   r   parse__version__Versionr   rC   ra  param)
TEST_CLASSES
SKIP_TESTSr   method_namemethodr  r.   markersr`  mnames
             r1   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 r5   )rA   r   r  )r   mat_clsr<  r  s       r1   _create_some_matrixzTest64Bit._create_some_matrixl  s    ryy~~a+,,r3   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)rA   r6   r@   r   r   r    rU  rV  r   rY  rZ  r   r\  r   )r   r<  r6   s      r1   _compare_index_dtypezTest64Bit._compare_index_dtypeo  s    a*j*=>IIOOu,K188>>U3JK:&EEKK5(Dquu{{e/CD:&IIOOu,-wqe+BCDDr3   c                 `     t        d       fd       } j                  D ]
  } ||        y )NrM   ri   c                 B    | t         j                  j                  dd            }t        j	                  |t         j
                                | t         j                  j                  dd            }t        j	                  |t         j                               y )NrM   r   r  )rA   r   r  r   r  rQ   r^   )r  r<  r   s     r1   r   z4Test64Bit.test_decorator_maxval_limit.<locals>.check}  sg    		r1-.AD--a:;		r1-.AD--a:;r3   r   MAT_CLASSESr   r   r  s   `  r1   test_decorator_maxval_limitz%Test64Bit.test_decorator_maxval_limitz  s:     
!b	1	< 
2	< '' 	G'N	r3   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  r  rA   rQ   r^   rk   )r  seen_32seen_64rk  r<  r   s        r1   r   z5Test64Bit.test_decorator_maxval_random.<locals>.check  s    GG3Z L,,Wa;!KT%>%>q"((%K!KT%>%>q"((%KwL %%JKKr3   r  r  s   `  r1   test_decorator_maxval_randomz&Test64Bit.test_decorator_maxval_random  s<     
!	-
	L 
.
	L '' 	G'N	r3   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)ra  r'  r~   r(  )r   r  instances      r1   r   z*Test64Bit._check_resiliency.<locals>.check  sl    uHx0%%'/.+.08%67,,. 878%67,,. 8s   A A3rX   )r   )r   r   r  r   r   s        r1   _check_resiliencyzTest64Bit._check_resiliency  s*     
!	&2	&	/ 
'	/ 	c;r3   zcls,method_namec                 ,    | j                  ||d       y )NrM   r  r*  r   r   r  s      r1   test_resiliency_limit_10z"Test64Bit.test_resiliency_limit_10  s    sKbAr3   c                 ,    | j                  ||d       y )NTr   r,  r-  s      r1   test_resiliency_randomz Test64Bit.test_resiliency_random  s    
 	sK=r3   c                 H    | j                  ||t        j                         y NrY   )r*  rA   rQ   r-  s      r1   test_resiliency_all_32z Test64Bit.test_resiliency_all_32      sKRXXFr3   c                 H    | j                  ||t        j                         y r2  )r*  rA   r^   r-  s      r1   test_resiliency_all_64z Test64Bit.test_resiliency_all_64  r5  r3   c                 ,    | j                  ||d       y )NT)r   r,  r-  s      r1   
test_no_64zTest64Bit.test_no_64  s    sKdCr3   c                     t        t        j                  d      d        }t        t        j                        d        } |         |        y )Nr   )rY   rn   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   rS  r0  rz  r  r   rx  )r   rS  rz  r  )r   r   rk   r  r  r   r   r   s    r1   check_limitedz3Test64Bit.test_downcast_intp.<locals>.check_limited  s     QFQFQF34A.!((;.!%%a8Iy12A.!((;Iy12A.!((;r3   r3  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 r<  )r   r  r  r   r   r   s    r1   check_unlimitedz5Test64Bit.test_downcast_intp.<locals>.check_unlimited  sv     QFQFQF34AHH!HEEqEMIy12AHH!HIy12AHH!Hr3   )r   rA   r^   )r   r=  r?  s      r1   test_downcast_intpzTest64Bit.test_downcast_intp  sN     
!RXX12
4
	<
4
	< 
!RXX	6
	 
7
	 	r3   N)r   r   r   r    r   r   r   r   r  r  r  r  r$  r*  r   r`  parametrizer  r.  r0  r4  r7  r9  r@  rX   r3   r1   r  r  i  s   z:z:NK-	E& " [[.>B ?B [[.>> ?> [[.>G ?G [[.>G ?G [[.>D ?D#r3   r  r5   )NFNNF)T)	TTTTTTTTT)or^  
contextlibr  r  r=  r  sys
scipy._libr   numpyrA   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   numpy.testingr   r   r   r   r   r   r   r   r   r   scipy.linalgrr   r  rs   r   r   r   r   r   r   r    r!   r"   r#   scipy.sparse._sputilsr$   r%   r&   r'   r(   scipy.sparse.linalgr)   r*   r+   scipy._lib.decoratorr,   r   r  r2   r:   	frozensetrZ  rK   r   r   r   r   r   r   r   rc  rz  r  r  r  r  contextmanagerr#  r%  r:  rB  rS  ri  r  r  r  r   r   r   r   r:  r]  r  r   r  r  r  r  r  r  r  r  r  r  rX   r3   r1   <module>rM     sl        
  ) ) ) ) + + + +  0 0 0F F / / *  ckk)m'
 %eW- (  !   > " JN?DNb$ $6"$ "$Xh7 h7V;d; d;Ng+ g+T% %.bD bDJTK TKnq0 q0h B Bn$ n$b L  LF`K `KF^0 ^0BZ= Z=z8 888 AE8<JN,0%'Xw&! w&t    M! M`    _Buu= _BD    nu- nb    Mu(-e/45J MD    <-ueE/45',u> <-~    fu(-e/45).0 fR    .B1 1h#5  /7 /d	. 		. 	6 -,g -('BT| |r3   