
    tKg                       d Z ddlZddlZddlZddlZddlZddlZddlZddlmZ	 ddl
Zddl
mZmZmZmZmZmZmZmZmZmZmZmZmZ ddlZddlmZmZmZmZmZm Z m!Z! ddl"Z#ddl$m%Z% ddl$m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8 dd	l9m:Z:m;Z;m<Z< dd
l=m>Z> ddl?m@Z@ dej                  v ZBd\dZCd ZD eEdg      ZFd ZG e!       ZHeHj                  e@       	 	 d]dZJd ZK G d d      ZL G d d      ZM G d d      ZN G d d      ZO G d d      ZP G d d      ZQ G d  d!      ZR G d" d#      ZS G d$ d%      ZT G d& d'      ZUej                  d(        ZW G d) d*      ZX G d+ d,      ZY G d- d.      ZZ G d/ d0      Z[ G d1 d2      Z\ G d3 d4      Z]d^d5Z^	 	 	 	 d_d6Z_ G d7 d8 e_             Z`e`j                           G d9 d: e_             Zbebj                           G d; d< e_dd=            Zcecj                           G d> d? e_d@            Zdedj                           G dA dB e_dddddC            Zeeej                           G dD dE e_dddddddF            Zfefj                           G dG dH e_ddddddI            Zgegj                          dJ Zh G dK dL      Zi G dM dNei      Zj G dO dPej      Zk G dQ dReke`      Zl G dS dTekeb      Zm G dU dVejeg      Zn G dW dXeiee      ZodY Zp G dZ d[      Zqy)`z Test functions for sparse matrices. Each class in the "Matrix class
based tests" section become subclasses of the classes in the "Generic
tests" section. This is done by the functions in the "Tailored base
class for generic tests" section.

    N)raises)arangezerosarraydotasarrayvstackndarray	transposediagkroninf	conjugateint8)assert_equalassert_array_equalassert_array_almost_equalassert_almost_equalassert_assert_allclosesuppress_warnings)
csc_matrix
csr_matrix
dok_matrix
coo_matrix
lil_matrix
dia_matrix
bsr_matrixeyeissparseSparseEfficiencyWarningsparray)_formats)supported_dtypesisscalarlikeget_index_dtypeasmatrixmatrix)spluexpminv)	decorator)ComplexWarningzgoogle.colabc                 8    ||n| d|}t        | |v |       y )Nz not found in )msg)r   )member
collectionr/   messages       `/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/sparse/tests/test_base.py	assert_inr4   2   s'    _cVJnZN*SGFj g.    c                 b    t        | j                  |j                  k(         t        | |fi | y N)r   dtyper   )xykwargss      r3   assert_array_equal_dtyper<   7   s&    AGGqwwq!&v&r5   dokc                 p    d } ||       D ](  } ||      D ]  }t        j                  ||      s  y * y)Nc                     g }| j                   j                         D ]>  }t        |t        j                  t        j
                  f      s.|j                  |       @ |S r7   )__dict__values
isinstancenpr
   genericappend)r9   arraysas      r3   _underlying_arraysz3sparse_may_share_memory.<locals>._underlying_arraysA   sJ     ""$A!bjj"**56a  % r5   TF)rC   may_share_memory)ABrH   rG   bs        r3   sparse_may_share_memoryrM   >   s?      "#A&A""1a( ' # r5   Fc                      t        j                  d       nt        j                          |rd
dn8d
fd	n/|r't         j                  j                  d      d
fd	nd
 fd	fdt        fd	       }|S )z
    Monkeypatch the maxval threshold at which scipy.sparse switches to
    64-bit index arrays, or make it (pseudo-)random.

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

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

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

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

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

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

1AAv
AGGAJN366Q;As1vA"1AIIaOIIaQ'!A#Qacc1qb) r5   c                    dt        t        j                  | |            ddfD ]=  }|dk  r*t        j                  j	                  t        dd            }n"t        j                  j                  dd|      } | ||       t               5 }|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  re   zChanging the sparsity structuz%s %derr_msg)r   rC   r   r   choicer   ra   r   r  r!   setdiagr   r   r   rh   r   )
rG   rL   r  rr  r  r   r  r  r/   s
           r3   check_setdiagz=_TestCommon.test_setdiag_comprehensive.<locals>.check_setdiagF  s.    #bggam,a4q5		((q"6A		))!Ra)8AaA&&(CJJ68WXIIaO )
 GGAqM::a=%%*&q!WQx5GHCFCF+A&q!uaeWQx=OP"199;7c1X;MN' 5 )(s   )E''E0	r\   )r  rZ  r   r   rZ  rZ  r   rY  r   r^  rZ  r  )rC   r   r]   r   r   r   rP  r   r   r  rh   r   )r   r  shapesr8   rf  r  ksr  rG   rL   k2r  r/   s              @@r3   test_setdiag_comprehensivez&_TestCommon.test_setdiag_comprehensive7  s    	*	O2 			t4ggrzz*E!YYr!tQqS)Aq!Q/0C!Qu5A1vU;A!!Q* !ii..rCGQ.H%aB/ I   +r5   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   r|  r|  )r   r_   r   Changing the sparsity structurer|  r  r   )r   r   r   )r   r_   r_   r  r  )r   r   r   )r  r_   r   r_   r  r_   r   r   r   r   r   r   )r   r   r   r   )r   rC   r   r   r  r!   r   r   r  r   r  r   r   )r   rf  m2rA   r  s        r3   test_setdiagz_TestCommon.test_setdiago  s   NN266!9%^^F# CJJ.0QR*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- !  s   F<H		Hc                 6   t        g dg dg dg      }| j                  |      }t        |j                               D ch c]  }t	        |       }}t        |j                               D ch c]  }t	        |       }}t        ||       y c c}w c c}w Nr   r   r   r   r   r   r  )r   r   r   nonzerotupler   r   rJ   AspijA_nzAsp_nzs         r3   test_nonzeroz_TestCommon.test_nonzero  s}    9Yy12nnQ$-aiik$:;$:bb	$:;&/&>?&>%)&>?T6" <?s   B0Bc                 J   t        g dg dg dg      }| j                  |      }t        t        j                  |            D ch c]  }t        |       }}t        t        j                  |            D ch c]  }t        |       }}t        ||       y c c}w c c}w r  )r   r   r   rC   r  r  r   r  s         r3   test_numpy_nonzeroz_TestCommon.test_numpy_nonzero  s    9i34nnQ$-bjjm$<=$<bb	$<=&/

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

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

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

y
)!'95r5   c                     t        g dg dg dg      }| j                  |      }t        j                  |      }t        j                  |      }t	        ||       t        |j                  |j                         y r&  )r   r   rC   r  r   r   r8   r'  s        r3   test_numpy_meanz_TestCommon.test_numpy_meanZ  sa    Y! " s#773<WWU^
!(J7X^^Z%5%56r5   c                    t        g dg dg dgt              }| j                  |dt              }t        j                  j                  |      }t        g dg dg dg      }| j                  |dt              }t        j                  j                  |      }t               5 }|j                  t        d	       |j                  t        d
       |j                  t        d       t        |      j                         }t        |      j                         }	d d d        t        |z
  t        d             t        	|z
  t        d             y # 1 sw Y   :xY w)Nr  r   r   r   rn  rZ  r  r3  r   r8   )      @              ?)r=         @r=  )r=  r=  r=  &splu converted its input to CSC formatCspsolve is more efficient when sparse b is in the CSC matrix format.spsolve requires A be CSC or CSR matrix format)r   floatr   rt   linalgr*   r   r  r!   r   r   r   )
r   MsMMexpNsNNexpr  sMexpsNexps
             r3   	test_expmz_TestCommon.test_expmg  s   9i4e<^^AU%^8||  #<|<=^^AU%^8||  # CJJ'8 JJ'U JJ'@ H$$&EH$$&E !  	"54<%-@!54<%-@# ! s   &A5EEc                 8      fd}t         fD ]
  } ||        y )Nc                    t        g dg dg dg|       }t               5 }|j                  t        d       |j                  t        d       |j                  t        d       j	                  |d|       }t        |      }d d d        t        j                        j                         t        j                  d	             t        t        t
        |       y # 1 sw Y   [xY w)
Nr  r9  r:  rB  rA  r@  r3  r;  r   )r   r   r  r!   r   r+   r   r   r   rC   r   r   r  )r8   rE  r  rF  sMinvr   s        r3   r   z#_TestCommon.test_inv.<locals>.check  s    y)Z8%@A"$

2KN

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

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

 0 0

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

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

s#3$*a+Atzz))+,?E2- c1+TZZ'')1-?F35**T"6>>+W5r5   c                   	 t        g dg dg dg      }| j                  |      }t        D ]*  }|j                  |      }dD ]o  }|j                  ||      t	        j
                  |j
                         t	        j                         |       t	        j                  |j                         q t        j                  |d      u        j                  |d      	t        	u       	fd}j                  d	v rd
D ]
  } ||        j                  dk(  rdD ]
  } ||        j                  dk(  sdD ]
  } ||        - y )Ny       @      @r   r   r   y      @      @r   rB  )TFr  FTc                     t        |       }t        |       }t        ||       t        ||u       d|j                  z  }||   }||    ||<   t        ||   ||   k7         |||<   y )N)r   )r   r   r   r   )	attributerG   rL   r  b_iS_castedS_copieds        r3   (check_equal_but_not_same_array_attributezI_TestCommon.test_astype.<locals>.check_equal_but_not_same_array_attribute4  ss    Hi0Hi0"1a(
#166MdQ4x!!!%!r5   csrcscrF  )indicesindptrdatacoo)rowcolr~  rD  )offsetsr~  )	r   r   r$   rn   r   r8   r   rO  r   )
r   r  r^  r9   D_castedr   rx  rt  rv  rw  s
           @@r3   test_astypez_TestCommon.test_astype   s5   ##  NN1!!Axx{H%88AD81X^^X^^<X--/:X__ahh7	 & HOOAEO2h>?qt4HHH,-	 "77!>I<YG "?E)!7I<YG "8E)!4I<YG "5? "r5   c                    t        g dg dg dg      }| j                  |      }t        |d      rd|j                  j                  _        |j                  dv r6d|j                  j                  _        d|j                  j                  _        t        D ]D  }|j                  |      }|j                  |      }t        |j                  |j                         F y )Nrq  rr  rB  r~  Fry  )r   r   hasattrr~  rd  	writeablerO  r}  r|  r$   rn   r   r8   )r   r  r^  r9   r  rv  s         r3   test_astype_immutablez!_TestCommon.test_astype_immutableI  s    ##  NN11f%*AFFLL"88,,',AHHNN$(-AIIOO%!Axx{Hxx{H8 "r5   c                    | j                  t        dd      j                  dd            }t        |j                  t        j                  d             t        |j                         j                  t        j                  d             t        |j                         j                  |j                         t        |j                  d      j                         j                  t        j                  d             t        |j                  d	      j                         j                  t        j                  d	             |j                         }|j                         }t        ||u        y )
Nr  rS   r^  r_   r   r   rU  r[  r]  )
r   r   r  r   r8   rC   asfptyperO  rn   r   )r   rJ   rK   r  s       r3   test_asfptypez_TestCommon.test_asfptypeZ  s    NN6!'2::1Q?@QWWbhhw/0QZZ\''))<=QZZ\((!((3QXXg&//177)9LMQXXl+446<<bhh|>TUJJLJJLQr5   c                 B      fd} j                   D ]
  } ||        y )Nc                     j                   |    }j                  |    }t        |dz  |dz  j                                t        |dz  |dz  j                                y Nr_   L1@r   r   r   r   r-  s      r3   r   z*_TestCommon.test_mul_scalar.<locals>.checkh  sW    //%(C%%e,Es1uuQw&7&7&9:s4x%*)=)=)?@r5   r   r   s   `  r3   test_mul_scalarz_TestCommon.test_mul_scalarg  "    	A %%E%L &r5   c                 B      fd} j                   D ]
  } ||        y )Nc                     j                   |    }j                  |    }t        d|z  d|z  j                                t        d|z  d|z  j                                y r  r  r-  s      r3   r   z+_TestCommon.test_rmul_scalar.<locals>.checks  sW    //%(C%%e,Equqw&7&7&9:tCx$u*)=)=)?@r5   r  r   s   `  r3   test_rmul_scalarz_TestCommon.test_rmul_scalarr  r  r5   c                     | j                   t        j                     }t        t              5  d |z   d d d        y # 1 sw Y   y xY wr7   )r   rC   r   r   r  )r   r   s     r3   test_rmul_scalar_type_errorz'_TestCommon.test_rmul_scalar_type_error~  s1    !!"**-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   r`  r8   r   r   rG   rL   rc  r   s         r3   r   z#_TestCommon.test_add.<locals>.check  s    //%(C%%e,E
AAcFAAAq!))+/2AGGIAqyy{ yy{QYY[8: AaDAq!))+!"45r5   r  r   s   `  r3   test_addz_TestCommon.test_add  s!    	6$ %%E%L &r5   c                 B      fd} j                   D ]
  } ||        y )Nc                     j                   |    }j                  |    }|j                         }d|d<   |}||z   }t        |||j	                         z          y )Nr?  r  )r   r   r   r   r   r  s         r3   r   z$_TestCommon.test_radd.<locals>.check  sW    //%(C%%e,E
AAcFAAAq!aiik/2r5   r  r   s   `  r3   	test_raddz_TestCommon.test_radd  s!    	3 %%E%L &r5   c                 t      fd} j                   D ]#  }|t        j                  d      k(  r ||       % y )Nc                     j                   |    }j                  |    }t        ||z
  j                         t	        j
                  d             t        |dz
  j                         |       j                  t	        j                  g dg dg dgd            }t        ||z
  j                         ||j                         z
         t        ||z
  j                         |j                         |z
         t        ||d   z
  ||d   z
         y )Nr  r   r   r   r   r|  r  r   r   r   r   r  r   rl  r   )r   r   r   r   rC   r   r   r   r8   r   r   rJ   r   s       r3   r   z#_TestCommon.test_sub.<locals>.check  s    //%(C%%e,E668"((6:JK	224c:,}EsKA 	224cAIIK6GHE	224aiikC6GH us1v~sSV|<r5   r   r   rC   r8   r   s   `  r3   test_subz_TestCommon.test_sub  s5    	=  %%E((%L &r5   c                 t      fd} j                   D ]#  }|t        j                  d      k(  r ||       % y )Nc                    j                   |    }j                  |    }t        ||z
  g dg dg dg       t        ||z
  g dg dg dg       t        d|z
  j                         |        j	                  t        g dg dg dgd            }t        ||z
  ||j                         z
         t        ||z
  |j                         |z
         t        |j                         |z
  |j                         |z
         t        ||j                         z
  ||j                         z
         t        |d   |z
  |d   |z
         y )Nr  r   r  r  r  r   )r   r   r   r   r   r(   r  s       r3   r   z$_TestCommon.test_rsub.<locals>.check  s   //%(C%%e,Eei	)-LMi	)-LME	224sd;vyJ&GLMAa#		*;<C!))+*;<qyy{U2AIIK#4EFuqyy{2C!))+4EF s1v~s1v|<r5   r   r  r   s   `  r3   	test_rsubz_TestCommon.test_rsub  s5    	=" %%E((%L &r5   c                 B      fd} j                   D ]
  } ||        y )Nc                 \   j                   |    }j                  |    }t        |dz   j                         |       t	        t        dd      D cg c]  }||z  	 c}      }t	        t        dd      D cg c]  }||z  	 c}      }t        |j                         |       y c c}w c c}w )Nr   r   r   )r   r   r   r   r  r   r   )r8   r   r   r  sumSsumDr   s         r3   r   z$_TestCommon.test_add0.<locals>.check  s    //%(C%%e,E 	224c:5A;7;aE	;78Dq!5AC56D5 85s   B$6B)r  r   s   `  r3   	test_add0z_TestCommon.test_add0  s!    		6 %%E%L &r5   c                 $   t        g dg dg      }t        g dg dg      }| j                  |      }| j                  |      }t        |j                  |      j	                         ||z         t        |j                  |      j	                         ||z         t        g dg dg      }t        g dg dg      }| j                  |      }| j                  |      }t        |j                  |      j	                         ||z         t        |j                  |      j	                         ||z         t        |j                  |      j	                         ||z         t        |j                  |      j	                         ||z         y )	N)r|  r   r  )r_   rz  rZ  )r   r  r   )r   rn  r   y      ?       y              @y              y      @      y            @rZ  y      @       @y      @      y             ?y              y             @r  )r   r   r   multiplyr   )	r   rJ   rK   r  Bspr  r  CspDsps	            r3   test_elementwise_multiplyz%_TestCommon.test_elementwise_multiply  s9   78$%78$%nnQnnQCLL-5571=CLLO335qs; $^45$^45nnQnnQCLL-5571=CLLO335qs; 	CLL-5571=CLLO335qs;r5   c                    t        dg      }t        dgg      }t        g d      }t        g dg      }t        dgdgdgg      }t        g dg d	g d
g      }g d}t        j                  d      }|j                  }	t        dgg      }
t        ddgddggg      }| j	                  |      }| j	                  |      }| j	                  |      }| j	                  |      }| j	                  |      }| j	                  |d         }| j	                  |	      }| j	                  |	d d dd f         }| j	                  |
      }|||||||||	|
|g}|||||||||g	}|D ]V  }|D ]O  }	 |j                         |j                         z  }|j                  |      }t        |j                         |       Q X |D ]`  }|D ]Y  }	 |j                         |z  }|j                  |      }t        |      rt        |j                         |       Nt        ||       [ b y # t        $ r t        t        |j                  |       Y w xY w# t        $ r Y t        $ r t        t        |j                  |       Y w xY w)Nr|  r   r  r   )r  r  r  r   r_   r   )r  r  r   )rn  r   r_   )r  r  r  r  r  r   r   N)r   rC   onesr8  r   r   r   r   r  r   r  r    )r   rJ   rK   r  r  Er  GHJKLr  r  EspFspHspHsppJspJsppKspr  
spmatricesr  r  
dense_multsp_mults                              r3   #test_elementwise_multiply_broadcastz/_TestCommon.test_elementwise_multiply_broadcast  sW   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
 A!"qyy{!:J **Q-#GOO$5zB    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         ?rz  g      ?r   r  r  r  r  r  )rz  r_   r   r  )r   r  r   r  )divide)r  r  )rC   r   r   r   r   r   r(   r   r   r   r  )r   r9  denomrJ   rK   r  r  s          r3   test_elementwise_dividez#_TestCommon.test_elementwise_divide3  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[[(;rxxc	(:;QUC <; *) <;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   r|  r   )r   rZ  r   r   )r   r  r  r  r   r   r_   r   )r  g@r  r   r   )r   r   rC   rD  matrix_powerr   r   r   r8   r   r   __pow__r  )r   rJ   rK   exponentret_spret_nps         r3   test_powz_TestCommon.test_powV  s    <|\JKNN1!H[FYY++Ax8Fv~~/8v||4	 " *H*aii: * NN1RaRT7#iA.r5   c           	         | j                  t        g dg dg dg dg            }t        g d|z  t        g d|j	                                      t        g dg      }t        ||z  ||j	                         z         y )Nr   r   r   r   r   r   r_   r   r<  r_   r   r   r  )r   r(   r   r   r   r   )r   rE  r  s      r3   test_rmatvecz_TestCommon.test_rmatvech  s^    NN6779W"EFG!)a-Y		1LMYK !#'3+<=r5   c                 0   | j                  dgdgdgg      }t        t        |t        d      z               t	        |t        d      z  j                         dgdgdgg       t	        |t        dg      z  t        g d             t	        |t        dgg      z  t        dgdgdgg             t	        |t        j                  d      z  t        dgdgdgg             t	        |t        j                  d      z  t        j                  d             y )Nr   r_   r   r  r   r   r   r   r   r   )r   r   r    r   r   r   rC   r  rp  s     r3   test_small_multiplicationz%_TestCommon.test_small_multiplicationn  s    NNQCQC=)U1X&'a%(l++-aS1#?Qs^U9%56Qu%uqcA3_'=>Q(%!qcA3*@AQ("''&/:r5   c                    | j                  dgdgdgg      }t        |t              r_t        |t	        j
                  d      z  |       t        |t        dgg      z  |       t        |t	        j
                  d      z  |       y t        |t        dg      z  t        g d             t        |t        dgg      z  t        dgdgdgg             t        |t	        j
                  d      z  t	        j
                  d             y )Nr   r_   r   r   r  r  r  )r   rB   r"   r   rC   r  r   r   rp  s     r3   .test_start_vs_at_sign_for_sparray_and_spmatrixz:_TestCommon.test_start_vs_at_sign_for_sparray_and_spmatrixz  s    NNQCQC=)a!%a"''%.&8!<%a%!,&6:%a"''%.&8!<UA3Zy)9:UQC5\)51#sQC+ABRWWV_,bggfo>r5   c                 6   | j                  dgdgdgg      }t               }t        ||z   d       t        ||z
  d       t        ||z  d       t        ||z   d       t        ||z
  d       t        ||z  d       t        ||z  d       t        ||z  d       y )Nr   r_   r   r   r   )r   r   r   r   rJ   rK   s      r3   test_binop_custom_typez"_TestCommon.test_binop_custom_type  s    
 NNQC!qc?+MQU01QU01QU01QU12QU12QU12QU01QU12r5   c                 8   | j                  dgdgdgg      }t        d      }t        ||z   d       t        ||z
  d       t        ||z  d       t        ||z   d       t        ||z
  d       t        ||z  d       t        ||z  d       t        ||z  d       y )Nr   r_   r   r   r   r   )r   r   r   r  s      r3   !test_binop_custom_type_with_shapez-_TestCommon.test_binop_custom_type_with_shape  s    NNQC!qc?+"5)QU01QU01QU01QU12QU12QU12QU01QU12r5   c                      G d d      }d}| j                  dgdgdgg      } ||      }||z  }||z  }t        |j                         |j                                t        |j                  |j                         y )Nc                       e Zd Zd Zd Zy)0_TestCommon.test_mul_custom_type.<locals>.Customc                     || _         y r7   scalar)r   r  s     r3   r   z9_TestCommon.test_mul_custom_type.<locals>.Custom.__init__  s	    $r5   c                      || j                   z  S r7   r  r   s     r3   r   z9_TestCommon.test_mul_custom_type.<locals>.Custom.__rmul__  s    t{{**r5   N)r   r   r   r   r   rZ   r5   r3   Customr    s    %+r5   r  r_   r   r   )r   r<   r   r   rO  )r   r  r  rJ   rc  A_scalarA_cs          r3   test_mul_custom_typez _TestCommon.test_mul_custom_type  ss    	+ 	+ NNQCQC=)6Nv:!e !1!1!3S[[]CX__cjj1r5   c                     | j                  dgdgdgg      }t               }t        ||k(  d       t        ||k7  d       t        ||kD  d       t        ||k\  d       t        ||k  d       t        ||k  d	       y )
Nr   r_   r   r   r   r   r   r   r   )r   r   r   r  s      r3   test_comparisons_custom_typez(_TestCommon.test_comparisons_custom_type  sx    NNQC!qc?+Q!VT"Q!VT"QUD!Q!VT"QUD!Q!VT"r5   c           	          | j                  t        g dg dg dg dg            }d}|j                  |      }||z  }t        |j	                         |j	                                y )Nr  r  r  r  rO   )r   r   r   r   r   )r   rE  r  actualr9  s        r3   test_dot_scalarz_TestCommon.test_dot_scalar  sS    NN5'')G!DEFvv:((*:*:*<=r5   c           	         | j                  t        g dg dg dg dg            }| j                  t        ddgddgddggd            }t        g d	g      j                  }t        j                  }t         |||      |j                         |z         t         |||      j                         ||z  j                                t         ||j                         |      ||z  j                                t         |||j                               ||z  j                                t        |t              st         |||      j                         ||z  j                                t         ||j                         |      ||z  j                                t         |||j                               ||z  j                                t        t        ||d       t        t        |d|       y )
Nr  r  r  r  r   r   r_   r   r  )r   r   r8  operatormatmulr   r   rB   r"   r   r   )r   rE  rK   r  r  s        r3   test_matmulz_TestCommon.test_matmul  sv   NN5'')G!DEFNN51Q%1qe!4S9:WI  !&C.!))+2CD 	"&A,"6"6"81q5//:KL!&a"81q5//:KL!&AIIK"81q5//:KL!W%%fQl&:&:&<q1uoo>OP%fQYY[!&<q1uoo>OP%fQ		&<q1uoo>OP 	j&!Q/j&!Q/r5   c           
          | j                  t        g dg dg dg dg            }t        g dg      j                  }t	        ||z  |j                         |z         t        |t        g d      z  j                  d       t        |t        dgdgd	gg      z  j                  d
       t        |t        dgdgd	gg      z  j                  d
       t        t        |t        g d      z  t                     t        t        |t        g d      j                  z  t        j                               t        ddg      t        g d      t        dgdgg      t        g d      t        dgdgg      g}|D ]  }t        t        |j                  |        t	        |t        g d      z  t        |j                         g d             t	        |dgdgd	ggz  t!        t        |j                         g d            j                         y )Nr  r  r  r  r  )r|  r   r_   r   )r|  r   r  )r   r(   r   r8  r   r   r   r   r   rB   r
   rC   r   r   r   r   r'   )r   rE  r  bad_vecsr9   s        r3   test_matvecz_TestCommon.test_matvec  s   NN6779W"EFGWI  !!c'199;+<= 	a%.(//5a%!aS!..55e<a&1#qc1#//66u= 	
1uW~-w78
1vg000"))<= 1Q%L%	"2EA3s)4D7OVaS!I%68A*aii3 
 	"!E'N"2C		G4LM!!aS!aSM/8C		G<T3U3W3WXr5   c                    t        g dg dg dg dg      }t        g dg dg dg dg      }t        ddgddgddggd      }| j                  |      }| j                  |      }t        ||z  j	                         ||z         t        ||z  ||z         t        ||z  ||z         t        ||z  ||z         |j                         }|}||z  }t        ||z  j	                         |       t        ||z  |       t        ||z  |       t        ||z  |       |j                         }t        ||z  j	                         |       t        ||z  |       t        ||z  |       t        ||z  |       |j                         }t        ||z  j	                         |       t        ||z  |       t        ||z  |       t        ||z  |       d	}	d
}
t        j                  d       t        |	df      }t        |	      D ]6  }t        d      D ]&  }t        j                         }||
k  s||
z  |||f<   ( 8 | j                  |      }||j                  z  }t        |j	                         |j	                         |j                  j	                         z         t        |j	                         |j	                         |j	                         j                  z         | j                  ddgddgg      }| j                  ddgddgddgg      }t        t        |j                  |       t!        |t"              rt        t        |j$                  |       y y )Nr  r  r  r  r   r   r_   r   r  g333333?r   r|  rZ  r  )r(   r   r   r   r   r_  r`  ra  r   r]   r   r   r8  r   r   r   rB   r"   r   )r   rG   a2rL   aspbspcsprc  wantr  fracrJ   r  r  r  rK   s                   r3   test_matmat_sparsez_TestCommon.test_matmat_sparse  s   GGIg67GGIg67QqE1Q%1&s+nnQnnQ!39"5"5"7Q?!#'1q51!!c'1q51!"s(AE2 iik1u!39"5"5"7>!#'40!!c'40!"s(D1iik!39"5"5"7>!#'40!!c'40!"s(D1iik!39"5"5"7>!#'40!!c'40!"s(D1 A1Q%LqA1XMMOt8tVAacF   NN1G!!))+qyy{QSS[[]/JK!!))+qyy{QYY[]]/JK NNQqE1Q%=)NNQqE1Q%1./j!,,2a!*aii3 "r5   c           	      P   t        g dg dg dg dg      }| j                  |      }t        ddgddgd	d
gg      t        ddgddgd	d
gg      g}|D ]Q  }||z  }t        t	        |t        |                   t        |j                  d       t        |t        ||             S y )Nr  r  r  r  r   r_   r   r|  rZ  r  r|  r_   )	r(   r   r   r   rB   typer   r   r   )r   rG   r	  bsrL   results         r3   test_matmat_densez_TestCommon.test_matmat_dense3  s    GGIg67nnQ aUAa5!A'(&1Q%1qe1D*EFA1WFJvtAw/0u-Qq*	 r5   c                     t        j                  g dg dg dgddgddgg      }|j                         }| j                  |      }dD ]  }|j	                  |      }t        |j                  |       t        |j                         |       | j                  |d	z         j	                  |      }t        |j                  |       t        |j                         |d	z           t        |d
z         |      }t        |j                  |       t        |j                         |        dD ]Q  }|j	                  |      }t        ||       | j                  |d	z         j	                  |      }t        ||d	z          S y )Nr  r   r   r|  )rZ  r   r   r   r_   r   r   )rF  r  r{  rz  rD  r=   lil              @_matrix)r   dense)	ru   r   r   r   asformatr   rO  r   eval)r   rJ   r  rO  rG   rL   rc  s          r3   test_sparse_format_conversionsz*_TestCommon.test_sparse_format_conversions@  s7   KK1QqE1Q%=AIIKNN1AF

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

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

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

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

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

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

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

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

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

 	QaSzAq6)*224a!qc
QF8J6KLtbTB4 1b')*224tbTB4 1b')*	
 	ebTB4"&'!R0199;tbTB4 1b')*	
 	tbTB4 %B.0199;tbTB4 1b')*	
 	ebTB4"&'2w78@@BtbTB4 1b')*	
 	Q1vY&&(!QF)4QBx[((*Ar2hK8Qub"X'//11b"X;? 	q!faiLQF#++-q!Q|A1vI/F	
 	r2hkN1q"g:&..0!RHaK.QG2L	
 	eRHoq !!UAr7^"34<<>r2hkN1q"g:&	
 	a!QiL!Q#++-qQF|QFAI/F	
 	a"bkNAr7A:&..0!ABxK.!R!2L	
 	aBx !%B.!"34<<>a"bkNAr7A:&	
 $q'$q'$'Qq!tW__&!A#q&	2Qq!tW__&!QqS&	2 HHqcU#&Qq!tW__&!Q$0 	QtbTz]**,ard
m<r5   c                 z   t         j                  j                  d       d}d}d}t        t         j                  j	                  ||            }t        j
                  ||dkD        }t         j                  j                  | dz   ||      }t         j                  j                  | dz   ||      }| j                  |      }|||f   }t        |      r|j                         }t        ||||f          ||z   }	||z
  }
t        t        |j                  |	|f       t        t        |j                  ||
f       y )Nr\   rM  r  r|  r  r   r  )rC   r   r]   r'   r  r  ra   r   r    r   r   r   r  r  )r   NUM_SAMPLESrE  rH  r  Ir  r^  SIJI_badJ_bads              r3   test_fancy_indexing_randomizedz1_TestFancyIndexing.test_fancy_indexing_randomized  s	   
		tRYY^^Aa()KK1s7#IIqb1fak:IIqb1fak:NN1!fC=++-CS!AaC&!AAj!--%;j!--!E;r5   c                    d\  }}t        t        ||z        j                  ||            }| j                  |      }t	        j
                  |dz   t              }t	        j
                  |dz
  t              }t	        j
                  |dz   t              }t	        j
                  |dz
  t              }t        j                  t        d|dz    d|       5  ||d d f   }	d d d        t        j                  t        d|dz
   d|       5  ||d d f   }	d d d        t        j                  ||t        d       f||t        d       f      D ]Q  \  }
}t        |
t              rt        |t              r't        j                  t        d      5  ||
|f   }	d d d        S y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   vxY w)	Nr  r   r^  r_   z(boolean row index has incorrect length: z instead of r  z&boolean \w+ index has incorrect length)r'   r   r  r   rC   r  r   r   r   r  r  r  r  rB   )r   rE  rH  rK   rJ   row_long	row_shortcol_long	col_shortr   r  r  s               r3   test_missized_maskingz(_TestFancyIndexing.test_missized_masking  s   1VAE]**1a01NN1 771q5-GGAE.	771q5-GGAE.	]]=a!eWLQRPST
 (A+A	

 ]]=a!eWLQRPST
 )Q,A	
 %%y%+.y%+.
DAq !U#
1e(<? adG	 

 


 
 s$   
F%
F1F=%F.1F:=G	c                 :   t         j                  j                  d       t        t	        d      j                  dd            }| j                  |      }t        j                  t         j                  j                  ddd      t              }t        j                  t         j                  j                  ddd      t              }t        j                  t         j                  j                  ddd	      t              }t        t        ||         ||          t        t        |d d |f         |d d |f          t        t        ||         ||          t        t        ||d
kD           ||d
kD            t        j                  g d      }t        j                  g d      }t        t        |||f         |||f          t        j                  dt              }t        j                  dt              }d|d<   t        j                  dt              }d|d<   t        t        |j                  |       t        t        |j                  |       t        t        |j                  |       t        t        t         f|j                  |df       y )Nr\   rM  rZ  rO   r   r_   r  r^  r  r  )TFTTF)
FTTFTFFFFF)r  r  Tr  )r  r   r   )rC   r   r]   r'   r   r  r   r   ra   r   r   r   r   r   r  r  r   )	r   rK   rJ   r/  r  r%  Z1Z2Z3s	            r3   test_fancy_indexing_booleanz._TestFancyIndexing.test_fancy_indexing_boolean  s   
		tVBZ''"-.NN1HHRYY&&q!!&4DAHHRYY&&q!"&5TBHHRYY&&q!'&:$GWQqT]AaD)WQq!tW%qAw/WQqT]AaD)WQq1uX&!a%1HH56HH 9 : 	WQq!tW%qAw/XXgT*XXgT*4XXgT*4j!--4j!--4j!--4z:.1vFr5   c                 z   t         j                  j                  d       t        t	        d      j                  dd            }| j                  |      }t        j                  t         j                  j                  ddd      t        	      }t        |      }t        t        ||         ||          t        t        ||d
kD           ||d
kD            t        j                  t         j                  j                  ddd      t        	      }t        j                  t         j                  j                  ddd      t        	      }t        |      }t        |      }t        t        |j                  |       t        t        |j                  |       t        t        t         f|j                  |df       y )Nr\   rM  rZ  rO   r   r_   r  r  r^  r  )rZ  r  )r  rO   r   )rC   r   r]   r'   r   r  r   r   ra   r   r   r   r   r   r  r  r   )	r   rK   rJ   r%  XspZr&  ZspYsps	            r3   "test_fancy_indexing_sparse_booleanz5_TestFancyIndexing.test_fancy_indexing_sparse_boolean  s6   
		tVBZ''"-.NN1HHRYY&&q!'&:$GmWQsV_ad+WQq1uX&!a%1HHRYY&&q!'&:$GHHRYY&&q!'&:$Gmmj!--5j!--5z:.QxHr5   c                     | j                  t        g dg dg dg            }t        j                  |j	                  d            dkD  }t        |d d |f   j                         ddgddgddgg       y )NrA  r  r   r   )r   r   rC   ravelr  r   r   )r   r   desired_colss      r3   #test_fancy_indexing_regression_3087z6_TestFancyIndexing.test_fancy_indexing_regression_3087  sf    nnUIw#@ABxx
+a/SL)113q!fq!fq!f5MNr5   c           	          | j                  t        ddgddgg            }t        t        |j                  dt        j                  ddg             y )Nr   r   r  r_   )r   r   r   r   r  rC   r   s     r3   test_fancy_indexing_seq_assignz1_TestFancyIndexing.test_fancy_indexing_seq_assign   s@    nnUQFQF#345j#//6288QqE?Kr5   c                    | j                  t        ddgddgg            }t               5 }|j                  t        d       |ddgddgf   |ddgddgf<   d d d        t        t        |      t        ddgddgg             y # 1 sw Y   .xY w)Nr   r   r_   r   r  )r   r   r   r  r!   r   r   )r   r   r  s      r3   test_fancy_indexing_2d_assignz0_TestFancyIndexing.test_fancy_indexing_2d_assign  s    nnUQFQF#345 CJJ.0QR"%q!fq!fn"5CAA ! 	WS\51a&1a&)9#:; ! s   +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 )NrM  rZ  rO   r   r   r_   r   r  FFFFFr^  r   r   r_   r   r|  	r'   r   r  r   rC   r   r   r   r  r   rK   rJ   r  r  s        r3   test_fancy_indexing_emptyz,_TestFancyIndexing.test_fancy_indexing_empty  s   VBZ''"-.!A#!A##NN1HH89WQqT]AaD)HHRs#WQqT]AaD)WQq!tW%qAw/HH_C048WQq!tW%qAw/WQq!tW%qAw/r5   N)r   r   r   r  r&  r*  r,  r3  r9  r>  rD  rH  rJ  rL  rS  rZ   r5   r3   r$  r$    sF    -1h=T<4!FG@I.O
L<0r5   r$  c              #      K   t        | d      r| j                  sd yd | j                  j                         }d| _        | j	                          t        || j                  d       yw)zIChecks that sorted indices property is retained through an operation
    has_sorted_indicesNFz'Expected sorted indices, found unsorted)r  rU  r|  r   sort_indicesr   )r%  r|  s     r3   check_remains_sortedrW    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 )NrZ  r(  r_   r)  )r   rC   r   r   r  r   r  r  rp  s     r3   test_bad_index_assignz._TestFancyIndexingAssign.test_bad_index_assign-  sQ    NN288QF+,z:y91==%QRSz:y91==*VWXr5   c                 L    d\   fd}dt        d dd      ft        j                  d      t        dd      ft        d	d      t        dd      ffD ]  \  }} |||        t        j                  d      t        j                  d      fd
fD ]  \  }} |||        y )Nr  c                 f   j                  f      }t        t        j                  f            }t	               5 }|j                  t        d       d|| |f<   t        |      5  d|| |f<   d d d        d d d        t        |j                         |       y # 1 sw Y   ,xY w# 1 sw Y   0xY wNr  r   )
r   r'   rC   r   r   r  r!   rW  r   r   )r  r  rJ   rK   r  rf  r  r   s        r3   _test_set_slicezI_TestFancyIndexingAssign.test_fancy_indexing_set.<locals>._test_set_slice5  s    1v&A1a&)*A"$

24UV!Q$)!,AadG - %
 &aiik15 -, %$s#   )B'(B0B'B$	 B''B0r{  rO   r|  r   rZ  r  r_   )r  r  )r  rC   r   r   r_  r  r  rf  r  s   `   @@r3   test_fancy_indexing_setz0_TestFancyIndexingAssign.test_fancy_indexing_set2  s    1	6  tR!34iilE!RL1Aqk5B<02DAq Aq!2 iilBIIaL13IJDAqAq! Kr5   c                 \      fd}t         D ]  } |t        j                  |              y )Nc                 R   j                  d|       }t               5 }|j                  t        d       | j	                  d      |ddgddgf<   t        |j                         | j	                  d      dz         | j	                  d      |ddddf<   t        |j                         | j	                  d      dz         | j	                  d      |d	<   t        |j                         | j	                  d      dz  | j	                  d      z          d d d        y # 1 sw Y   y xY w)
NrY  r^  r  r   r   r_   r>  r|  r  )r   r   r  r!   r  r   r  r  s      r3   r   zD_TestFancyIndexingAssign.test_fancy_assignment_dtypes.<locals>.checkG  s    vU3A"$

24UV!&A1Q%1+QUUWejjmAo6"ZZ_!A#ac'
QUUWejjmAo6C#QUUWejjmAo

1&EF %$$s   C5DD&r  r   s   `  r3   test_fancy_assignment_dtypesz5_TestFancyIndexingAssign.test_fancy_assignment_dtypesF  s%    		G &E"((5/" &r5   c                    | j                  d      }| j                  t        dd            }g d}d}t        |      }t               5 }|j	                  t
        d       t        |      5  ||df   j                  |d|f<   ||df   j                  |d|f<   ||df   j                  |d|f<   d d d        t        |j                         |j                  j                                | j                  d	      }t        |      5  d
dg|dddf<   d d d        t        |j                         g dg dg       | j                  d      }t        |      5  d
gdgg|dddf<   d d d        t        |j                         ddgdd
gddgg       | j                  d      }t        t        j                  d            }t        |      5  ||fD ]  }g d|g dg df<    	 d d d        t        |j                         |       | j                  d      }t        |      5  g d|d<   d d d        t        |j                         d       t        t        j                  d            }g d|d<   t        |j                         |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   IxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr,  r   r|  r  r  r   r   r_   r  rO   r  rB  )r   rO   r  r  r3  r  r  )r  r  r  )r   r   r   r   r  r!   rW  r8  r   r   r'   rC   r   r   r  )r   rJ   rK   i0i1i2r  r  s           r3   test_sequence_assignmentz1_TestFancyIndexingAssign.test_sequence_assignmentU  sd   NN5!NN3q8$2Y CJJ.0QR%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(QA*1Agw&'   ) qyy{A. v&A%a(*3&' )+&)*A&/A"#qyy{A.G ! (( )( )( )( )(= ! 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 )NrM  rZ  rO   r   r   r_   rN  rO  *   r^  rP  rQ  rR  s        r3   test_fancy_assign_emptyz0_TestFancyIndexingAssign.test_fancy_assign_empty  s   VBZ''"-.!A#!A##NN1HH89!WQZ#HHRs#!WQZ#!A#WQZ#HH_C048!A#WQZ#!A#WQZ#r5   N)r   r   r   r[  ra  rd  ri  rl  rZ   r5   r3   rY  rY  ,  s    Y
"(#+/Z$r5   rY  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   r|  r_   r  r|  rZ  r  r   r_   r   r   r\   rZ  r  )rC   r   r   r]   r'   r  r   r    r   r   r   r  r  r  )	r   setsr/  r  r  r^  r0  r1  r2  s	            r3   test_fancy_indexing_ndarrayz._TestFancyMultidim.test_fancy_indexing_ndarray  s   XXsQC!o&(;<XXsQC!o&)(=>XXyk"BHHqcA3_$=>XXi "((QC!qc?";<XXy),-XXy),-/ DAqIINN4 1-.Aq!AAaC&C}kkma!f%EEEE*ammeAY?*ammaY? *ammq!feDk5JK*ammeDkAq65JK% r5   N)r   r   r   rt  rZ   r5   r3   rn  rn    s    Lr5   rn  c                   $    e Zd Zd Zd Zd Zd Zy)_TestFancyMultidimAssignc                    t         j                  j                  d       t        t         j                  j	                  dd            }| j                  |      }t         j                  j	                  dd      }t        j                  g dg dg      }t        j                  g dg d	g      }t        |      5  ||||f<   d d d        ||||f<   t        |j                         |       |dz   }|dz   }g d}t        |      5  ||||f<   d d d        ||||f<   t        |j                         |       t        |      5  d|||f<   d d d        d|||f<   t        |j                         |       t        t        |j                  ||f|       t        t        |j                  ||f|       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w
Nr\   rZ  r  r_   r   r  rp  rq  rr  )rC   r   r]   r'   r  r   r   rW  r   r   r   r  r  )	r   r  r^  r%  r/  r  r1  r2  r  s	            r3   test_fancy_assign_ndarrayz2_TestFancyMultidimAssign.test_fancy_assign_ndarray  sv   
		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   rW  r   r  r!   r'   rC   r   r   r   )r  r  rJ   r  rK   rf  r  r   s        r3   r_  zR_TestFancyMultidimAssign.test_fancy_indexing_multidim_set.<locals>._test_set_slice  s    1v&A%a(*;*=

24UV!Q$ +>( 1a&)*AAadG%aiik15 +>*=((s"   B'B	B'B$	 B''B0r   r_   r   r   r|  r  r   r_   r|  )r   r|  r   )r|  r   r_   )rC   r   r`  s   `   @@r3    test_fancy_indexing_multidim_setz9_TestFancyMultidimAssign.test_fancy_indexing_multidim_set  s    1	6 hhAA/01a&91a&)QFQF+;<#Y/)Y1GHJDAq Aq!Jr5   c           	      :   t         j                  j                  d       t        t         j                  j	                  dd            }| j                  |      }t         j                  j	                  dd      }g dg dg}g dg d	g}||||f<   ||||f<   t        |j                         |       |D cg c]  }|D cg c]  }|dz   	 c} }}}|D 	
cg c]  }	|	D 
cg c]  }
|
dz   	 c}
 }}	}
g d}||||f<   ||||f<   t        |j                         |       d|||f<   d|||f<   t        |j                         |       t        t        |j                  ||f|       t        t        |j                  ||f|       y c c}w c c}}w c c}
w c c}
}	w rx  )rC   r   r]   r'   r  r   r   r   r   r  r  )r   r  r^  r%  r/  r  r  iir1  r  jjr2  r  s                r3   test_fancy_assign_listz/_TestFancyMultidimAssign.test_fancy_assign_list  sl   
		tRYY^^Aq)*NN1IINN1a 	"	"!A#!A#QYY[!$/01q!1%1R"q&1%q1/01q!1%1R"q&1%q1!A#!A#QYY[!$!A#!A#QYY[!$j!--%A>j!--!EA> &1%1s0   7	F FF	F"F.FFFc                    t         j                  j                  d       t        t         j                  j	                  dd            }| j                  |      }g d}g d}|D cg c]  }|dz   	 }}|D cg c]  }|dz   	 }}g d}	t        j                  d      d d d f   }
t        t        |j                  |t        d       f|	       t        t        |j                  t        d       |f|
       y c c}w c c}w )Nr\   rZ  r  )r   r_   r   r   r|  r_   )rZ  r  r   r_   r   r   )r   r_   r   r|  rZ  r  r  )rC   r   r]   r'   r  r   r   r   r  r  r  )r   r  r^  r/  r  r  r1  r  r2  C1C2s              r3   test_fancy_assign_slicez0_TestFancyMultidimAssign.test_fancy_assign_slice  s    
		tRYY^^Aq)*NN1"#$!Ba!$"#$!Ba!$"YYq\!T'"j!--%t1ErJj!--%+u1ErJ %$s   &C58C:N)r   r   r   ry  r}  r  r  rZ   r5   r3   rv  rv    s    ?B""?:Kr5   rv  c                   ^    e Zd ZdZd Zej                  j                  d      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   rl  g      @)g     ,@g      r   r   r  r   )r   g      @r   r   r   r   )g     2@      r   r   r   r   r]  )g      ?r   r   r   r  g      )r       @r   r   r   g      @)r   r  r   r   r   r   )r  r   r   r   r   r      rS   )
r   _TestArithmetic__A_TestArithmetic__Br  r   rn   r  r   _TestArithmetic__Asp_TestArithmetic__Bspr   s    r3   __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-
r5   rZ  c                    | j                          t        | j                  | j                  z   j	                         | j
                  | j                  z          t        D ]  }t        j                  d      5  | j
                  j                  |      }d d d        | j                        }t        D ]w  }t        j                  |t        j                        sEt        j                  d      5  | j                  j                  j                  |      }d d d        n| j                  j                  |      }| j                        }||z   }||z   }t        |j                   |j                          t        |j	                         |       t        ||z   |       t        ||z   |       t        j                   d      ||fv r||z
  }||z
  }t        |j                   |j                          t        |j	                         |       t        ||z
  |       t        ||z
  |       z  y # 1 sw Y   xY w# 1 sw Y   xY w)Nr  r  r   )_TestArithmetic__arith_initr   r  r  r   r  r  r$   rC   r  rn   r   rf   r;  r  r   r8   	r   r9   rJ   r  r:   rK   r  D1S1s	            r3   test_add_subz_TestArithmetic.test_add_sub:  s    	ZZ$**$--/DHH1D	

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

b%*3r7;;=%8:RXXbhh/ &	 ".. 76s   G"&G)G&	)G2N)
r   r   r   r  r  r   r  	fail_slowr  r  rZ   r5   r3   r  r    s5    .. [[1)/ )/V0r5   r  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  r^  rZ  r|  r      r  iir   rO   r   r  r_   r  r   rO   rO   r   )rC   r[  r   rS   r`   r]  r   r  r   r   rh   rR   r8   r   rC  r   r   )r   r8   r  r%  rA  s        r3   test_minmaxz_TestMinMax.test_minmax  s|   jj"**bhh"--PE		"E*221Q7Aq!A!$"%..GAq!A#&!$FAq!A#&!$# Q( NN299Q+33Aq9:QUUWa QUUW]]AGG,BQUUWb! NN288F+,QUUWa QUUWa QUUW]]AGG, IIb&..q3!A#q&	NN1QUUWa QUUWb! ((6"BHHW$5rxx7HIAq!A*aee,*aee, Jr5   c                     t        j                  d      j                  dd      }d|dd d f<   d|d d df<   d|d<   d|d	<   | j                  |      }g d
}|D ]x  }t	        |j                  |      j                         |j                  |d             t	        |j                  |      j                         |j                  |d             z t        j                  dd      j                  dd      }| j                  |      }|D ]x  }t	        |j                  |      j                         |j                  |d             t	        |j                  |      j                         |j                  |d             z t        j                  d      }| j                  |      }|D ]x  }t	        |j                  |      j                         |j                  |d             t	        |j                  |      j                         |j                  |d             z ddg}ddg}t        j                  d      }| j                  |      }|D ]:  }t        t        |j                  |       t        t        |j
                  |       < |D ]|  }t	        t        j                  d      |j                  |      j                                t	        t        j                  d      |j                  |      j                                ~ t        j                  d      }| j                  |      }|D ]:  }t        t        |j                  |       t        t        |j
                  |       < |D ]|  }t	        t        j                  d      |j                  |      j                                t	        t        j                  d      |j                  |      j                                ~ y )NrM  rZ  rO   r   r   r  r3  r  r  r  r  r   r   r  Tr,  3   )rO   rZ  r  r  r	  r  r  )rC   r   r  r   r   rR   r   rh   r   r   r   )r   r  r%  r+  r  	axes_evenaxes_odds          r3   test_minmax_axisz_TestMinMax.test_minmax_axis  s6   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D*aee$7*aee$7  Drxx/D1A1I1I1KLrxx/D1A1I1I1KL  HHWNN1D*aee$7*aee$7  Drxx/D1A1I1I1KLrxx/D1A1I1I1KL r5   c                 x   t        t        j                  d      j                  dd      t              }d|dd d f<   d|d d df<   d|d<   d	|d
<   t        j
                  |d<   t        j
                  |d<   | j                  |      }|j                         }t        j                  |      sJ |t        j                  |      k(  sJ |j                         }t        j                  |      sJ |t        j                  |      k(  sJ g d}|D ]  }|j                  |      }t        |t              sJ t        |j                         t        j                  ||             |j                  |      }t        |t              sJ t        |j                         t        j                  ||              y )NrM  rZ  rO   r^  r   r   r  r3  r  r  r  )r   r|  r  r  )r(   rC   r   r  rC  r   r   nanmaxr  nanminrB   r   r   r   )	r   r  r%  X_nan_maximumX_nan_minimumr+  r  X_nan_maximaX_nan_minimas	            r3   test_nanminmaxz_TestMinMax.test_nanminmax  sp   299R=((2.e<!Q$!Q$$$&&$&&$NN1
{{=)))		!,,,
{{=)))		!,,,D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 r5   c                    t        g dg dg dg      }| j                  |      }dD ]W  }t        ||      }t        t        |d       t        t
        |d       t        t
        |d       t        t        |d	d	
       Y y )Nr  r  r  )rh   rR   r   r  r	  r
  r   r  )r   r   r   r   r   r  )r   r   r   fnamer   s        r3   test_minmax_invalid_paramsz&_TestMinMax.test_minmax_invalid_params  sq    Y! " s##E5%(D*d3)T7)T4*d: $r5   c                 P   ddl m} t        g dg dg dg      }| j                  |      }t	        ||j
                        ret        t        j                  |      t        j                  |             t        t        j                  |      t        j                  |             y y )Nr   _datar  r  r  )
scipy.sparser  r   r   rB   _minmax_mixinr   rC   rh   rR   )r   r  r   r   s       r3   test_numpy_minmaxz_TestMinMax.test_numpy_minmax  sy     	'Y! " s# eU001rvve}bffSk:rvve}bffSk: 2r5   c           
         ddl m} t        j                  g dg dg dg dg dg      }|j	                         }t        j                  dd	gd
dgg      }t        j                  dd	gd
dgg      }t        j                  g dg dg dg      }|||||fD ]  }| j                  |      }t        ||j                        s,t        |j                         t        j                  |             t        |j                         t        j                  |             t        |j                  d      t        t        j                  |d                   t        |j                  d      t        t        j                  |d                   t        |j                  d      t        t        j                  |d      j                  dd                   t        |j                  d      t        t        j                  |d      j                  dd                    t        j                  d      }t        j                  d      }dD ]K  }	| j                  |      }t        t        |j                  |	       t        t        |j                  |	       M dD ]K  }	| j                  |      }t        t        |j                  |	       t        t        |j                  |	       M y )Nr   r  )r  rZ  r_   r   )r   r   r  r  )r  r  rz  rn  r  )r   r_   r   r   r|  r   r  rZ  )rZ  rZ  r   )r|  r  rO   )r   r|  r  r  r   r  r  r  rd   )Nr   )r  r  rC   r   r   r   rB   r  r   argmaxargminr'   r  r  r   r   )
r   r  r  D2D3D4D5r  r   r  s
             r3   test_argmaxz_TestMinMax.test_argmax/  s3   &XX
  \\^XX1v1v&'XX1v1v&'XXy*i89b"b"%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 &$ XXfXXfD..$C*cjjt<*cjjt< 
 D..$C*cjjt<*cjjt< r5   N)	r   r   r   r  r  r  r  r  r  rZ   r5   r3   r  r    s#    --^?MB5<;;$,=r5   r  c                       e Zd Zd Zy)_TestGetNnzAxisc                 (   t        ddgddgddgg      }|j                  t              }| j                  |      }t        j
                  t        j                  f}t        |j                  d       |j                  d              t        |j                         |j                                t        |j                  d      |j                  d             t        |j                  d      j                  |       t        |j                  d      |j                  d             t        |j                  d      j                  |       t        |j                  d	      |j                  d	             t        |j                  d	      j                  |       t        |j                  d
      |j                  d
             t        |j                  d
      j                  |       t        t        |j                  d       y )Nr   r_   r   rZ  r  r  r  r   r  r  )r   rn   r   r   rC   rS   r`   r   r  getnnzr4   r8   r   r   )r   r   bool_datr   accepted_return_dtypess        r3   test_getnnz_axisz _TestGetNnzAxis.test_getnnz_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7r5   N)r   r   r   r  rZ   r5   r3   r  r  ^  s    8r5   r  c                     |r| S d }t        | j                        }| j                  j                         D ]"  \  }}|j                  d      s ||      ||<   $ t	        | j
                  dz   | j                  |      S )z
    Construct a class that either runs tests as usual (require=True),
    or each method skips if it encounters a common error.
    c                 B     t        j                          fd       }|S )Nc                      	  | i |S # t         t        t        t        t        f$ r t        j                  d      w xY w)Nr  )r~  r  r   r  AttributeErrorr   r   )rG   r   fcs     r3   wrapperz6_possibly_unimplemented.<locals>.wrap.<locals>.wrapper  sF    Aq<B<'+Y
"N4 A ++&?@@As    4?)	functoolswraps)r  r  s   ` r3   wrapz%_possibly_unimplemented.<locals>.wrap  s'    __R A !A Nr5   test_NotImplemented)dictr@   ra  
startswithr  r   	__bases__)r   requirer  new_dictr   r   s         r3   _possibly_unimplementedr  z  sz    
 
		 %,,,,.JD$w'!%d / CLL#33MM 	r5   c	                 >   t         t        t        |       t        t        t
        t        t        |      t        t        |      t        t        |      t        t        |      t        t        |xr |      t        t        |xr |      t        t        |      t        t        |      f}	i }
|	D ]e  }|j                  D ]T  }|j                  d      s|
j!                  |      }|(t#        d|j$                   d| d|j$                         ||
|<   V g t'        d|	i       S )z
    Construct a base class, optionally converting some of the tests in
    the suite to check that the feature is not implemented.
    r  zTest class z overloads test z defined in TestBase)r   r  r  r  r  r  r  r  r$  rY  rn  rv  r  r  r@   r  getr   r   r  )getsetslicingslicing_assignfancy_indexingfancy_assignfancy_multidim_indexingfancy_multidim_assignminmaxnnz_axisbasesnamesr   r   old_clss                 r3   sparse_test_classr    s    $[&9#$\7;$%7H$%7H$%=%13$%7%3%O8OQ$%=%:%K|M$[&9$_h?AE$ ELLD??7+iioG" ;s||n<L$(6g6F6F5G"I J JE$K !  
E2&&r5   c                       e Zd Zed        Zej                  ej                  ej                  ej                  gZ
d Zd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zy)r  c                     t               5 }|j                  t        d       t        |i |cd d d        S # 1 sw Y   y xY wNr  )r   r  r!   r   r   argsr;   r  s       r3   r   zTestCSR.spcreator  3     CJJ.0QRt.v. !     !6?c                 h   t        g dg dg dgd      }t        |      }t        |j                  g d       t	        |j
                  g d       t	        |j                  g d       t        |j                         d       t        |j                  d	       t	        |j                         |       y )
N)r   r|  r   r  r  r   )r|  r   r_   r  r  r   rz  )r   r   r   r~  r   r|  r}  r   r  rO  r   r   rL   r
  s      r3   test_constructor1zTestCSR.test_constructor1  s    9"$ m!#((733;;w/3::i0SZZ\!$SZZ&3;;=!,r5   c                     t        dd      }d|d<   t        |      }t        |j                  dg       t	        |j
                  dg       t	        |j                  g d       t        |j                         |       y )Nr  r  r   rZ  r  r|  )r   r   r   r   r   r   r   )r   r   r   r~  r   r|  r}  r   r  s      r3   test_constructor2zTestCSR.test_constructor2  s^    %#m!#((A3/3;;s+3::o6!#++-3r5   c                    t        ddgddgddggd      }t        |      }t        |j                  g d       t	        |j
                  g d       t	        |j                  g d       t        |j                         |       y )	Nr   r   r_   r   r   r  r  r  )r   r   r   r~  r   r|  r}  r   r  s      r3   test_constructor3zTestCSR.test_constructor3  sm    Aq6q6q6! m!#((733;;w/3::i0!#++-3r5   c                    t        g d      }t        g d      }t        g d      }t        ||f      }t        ||fd      }t        t	        d      j                  dd      |j                                t        dd	gd
d	gd
d	gfft        j                        }t        dd
gd
d	ggt        j                        }t        ||j                                t        g dg dg dff      }|j                  dk(  sJ y )Nr_   r   r   r   r   r   r   r   r_   r   r_   r   r   r   r   r   r   r_   r_   r_   r_   r   g      @g      $@r<  g      "@r>  rc  g      &@r?  g       @g      @rT  r,  r  r|  r              r   r   r^  r   r   r   r   r   r_   r_   r   r   r   r   r   r_   )
r   r	   r   r   r   r  r   rC   uint64r4  )r   r  r  r~  r  rz  r  s          r3   test_constructor4zTestCSR.test_constructor4  s    5656 3 4 SI$r5)6":--a3S[[]C 9a.Aq6Aq6*:;299M	1~1v.bii@5#++-0 )i%;<=ww!||r5   c                     t        g d      }t        g d      }t        g d      }t        |||f      }t        |j                  d       y Nr   r   r   r   r   rZ  r   r_   r  rN  )r   r   r   r   r   r}  r|  r~  rz  s        r3   test_constructor5zTestCSR.test_constructor5  ?    y!	"Y$01399U+r5   c                     g d}g d}g d}t        |||f      }t        |j                  d       t        t	        j
                  |j                  t        j                               y r  )r   r   r   r   rC   rf   r8   signedintegerr  s        r3   test_constructor6zTestCSR.test_constructor6  sM    $01399e,cii)9)9:;r5   c                    t        d      dz   }t        g dt        j                        }t        g dt        j                        }t	        |||fd      }t        g dg d	g d
gd      }t        |j                  j                  t        j                  t        j                               t        |j                  j                  t        j                  t        j                               t        |j                         |       y )Nr  r   )r   r_   r   r   r   r_   r^  r   r_   r|  r  r3  r   r  r  )rZ  r   r  r   )r   r   rC   r`   r   r   r}  r8   rS   r|  r   r   )r   r~  r  ptrrG   rL   s         r3   test_constructor_smallcolz!TestCSR.test_constructor_smallcol  s    ay1}&bhh7L1c3'v69"$ 	QXX^^RXXbhh%78QYY__bhhrxx&89199;*r5   c           	      p   t        d      dz   }t        j                  t        j                        j                  dz   }t        ddd||dz   |dz   gt        j                        }t        g dt        j                        }t        |||f      }t        |j                  j                  t        j                  t        j                               t        |j                  j                  t        j                  t        j                               t        |j                  dt	        |      dz   f       y )	Nr  r   r  r   r_   r^  r  r   )r   rC   rQ   rS   rR   r   r`   r   r   r}  r8   r|  r   r   )r   r~  larger  r  rG   s         r3   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4r5   c                 .   t        d      }t        g d      }t        g d      }t        |||fd      }|j                         }|j	                          t        |j                  g d       t        |j                         |j                                y )NrZ  r  r_   r   rZ  r|  r   r   rZ  r_   rO   r  r   r_   r  r|  rZ  )r   r   r   r   rV  r   r|  r   r   r~  r|  r}  r	  r
  s         r3   test_sort_indiceszTestCSR.test_sort_indices+  sm    ay(y!$0?hhj3;;73;;=#++-8r5   c                 ^   t        g d      }t        g d      }t        g d      }t        |||fd      }|j                         }|j                          t	        |j
                  d       t	        |j                  g d       t	        |j                         |j                                y )Nr   r   r   r   r_   r   r   r   r   r_   r   r|  rZ  r  r  r  r   r   r  r  r  r   r  )r   r   r   eliminate_zerosr   r4  r~  r   r  s         r3   test_eliminate_zeroszTestCSR.test_eliminate_zeros5  ~    -.01y!$0?hhj377A&388I.3;;=#++-8r5   c           	         t        t        j                  d      j                  dd      dz        }dD ]  }t	        t        t         |      d        t        ||             }t	        |j                  |j                         t        |j                  |j                         t        |j                  |j                         t        |j                          t        t        |      |j                                       y )Nr  r|  rZ  ri  rm  rn  ro  rp  rq  rr  rs  rt  ru  rh  rv  rw  rx  ry  rz  r{  r|  r}  T)r   rC   r   r  r   r  r   r   r   r|  r}  r   r   r%  re  rl  s       r3   test_ufuncszTestCSR.test_ufuncs@      ryy},,Q2S89JA Q/6AB"((+qyy"**5qxx3rzz|^WR^AIIK-HIJr5   c                 P   t        d      }t        g d      }t        g d      }t        |||fd      }t        d      }t        g d      }t        g d      }t        |||fd      }t        ||z   j	                         |j	                         |j	                         z          y )	NrZ  r  r  r  r  r  r  r   rZ  r  r_   r|  r   r_   r  )r   r   r   r   r   r  s         r3   test_unsorted_arithmeticz TestCSR.test_unsorted_arithmeticL      ay(y!$0?ay*+y!$0?cCi((*CKKMCKKM,IJr5   c                    t        j                  dgdgdgg      }t        j                  g d      }t         j                  j                  d       t	        t         j                  j                  dd            }| j                  |      }|||f   }t        |      r|j                         }t        ||||f          y Nr   r_   r   rp  r\   rZ  r  
rC   r   r   r]   r'   r  r   r    r   r   r   r/  r  r  r^  r0  s         r3   test_fancy_indexing_broadcastz%TestCSR.test_fancy_indexing_broadcastW      HHqcA3_%HHY
		tRYY^^Aq)*NN1!fC=++-CS!AaC&!r5   c                    t        j                  ddg      }t        j                  ddg      }t        j                  ddg      }t        j                  ddg      }t        |||f      j                         }t	        d|j
                         t        |j
                  t              sJ t        |||f      j                         }t	        d|j
                         |j                          t	        d|j
                         t        |j                  |       t        |||f      j                         }d|_        t	        d|j
                         t        |j                  |       |j                          t        |j                  |       y)z@Ensure has_sorted_indices memoizes sorted state for sort_indicesr   r   r_   TFN)rC   r   r   r   r   rU  rB   r   rV  r   r|  )r   sorted_indsunsorted_indsr~  r}  rE  s         r3   test_has_sorted_indiceszTestCSR.test_has_sorted_indicese  s8   hh1v&!Q(xxA1a&!k62388:T1//0!..555mV45::<UA001 	
T1//0199k2mV45::<#T1//0199m4 	
199m4r5   c                    t        t        j                  dg      t        j                  dg      t        j                  ddg      f      }t        d|j                         t        j                  ddg      }t        j                  ddg      }t        j                  ddg      }t        |||f      j                         }t        d|j                         t        |j                  t              sJ |j                          t        d|j                         t        dt        |j                               t        |||f      j                         }d|_        t        d|j                         t        dt        |j                               |j                          t        dt        |j                               y)z=Ensure has_canonical_format memoizes state for sum_duplicatesr_   r   r   TFN)r   rC   r   r   has_canonical_formatr   rB   r   sum_duplicatesr   r|  )r   rE  r|  r~  r}  s        r3   test_has_canonical_formatz!TestCSR.test_has_canonical_format  sP    !rxx}bhh1v6FGHT1112((Aq6"xxA1a&!gv./446UA223!00$777 	
T1112QAII'gv./446!%T1112QAII' 	
QAII'r5   c                     t        j                  dt         j                        }t        j                  dt         j                        }t        j                  d      }t        |||fd      }t        |||fd      }t        j                  dt         j                        }t        ||fd      }t        ||fd      }t        d      }	t        d      }
t	        |j
                  j                  t         j                         t	        |j
                  j                  t         j                         t	        |j
                  j                  t         j                         t	        |j
                  j                  t         j                         t	        |	j
                  j                  t         j                         t	        |
j
                  j                  t         j                         |||||	|
fD ]  }||z    	 y )Nr_   r^  r   r   r  r           r  )rC   r   rS   r   r   r}  r8   r`   r   r}  r|  valsrG   rL   r  rc  r   rd  re  r9   s               r3   test_scalar_idx_dtypezTestCSR.test_scalar_idx_dtype  K    !288,((1BHH-xx{gv.lCgv.jAXXfBHH-bz6bz4|$z"QXX^^RXX.QXX^^RXX.QXX^^RXX.QXX^^RXX.QXX^^RXX.QXX^^RXX. Q1a#AE $r5   c                     t        g dg      }t        g dg      }||z   j                  dk(  sJ |j                  |      j                  dk(  sJ y )Nr  r   r   r   r_   r   )r   r4  r  r   rG   rL   s      r3   test_binop_explicit_zerosz!TestCSR.test_binop_explicit_zeros  sN     	{#	{#A{{azz!}  A%%%r5   N)r   r   r   r  r   rC   r  int_r   r]  r   r  r  r  r  r	  r  r  r  r  r"  r'  r,  r2  r7  r;  rC  rH  rZ   r5   r3   r  r    s    / / 88RWWbjj"--@K
-44(,<+ 59	9
J	K"58(:0&r5   r  c                       e Zd Zed        Zej                  ej                  ej                  ej                  gZ
d Zd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zy)r  c                     t               5 }|j                  t        d       t        |i |cd d d        S # 1 sw Y   y xY wr  )r   r  r!   r   r  s       r3   r   zTestCSC.spcreator  r  r  c                 t   t        g dg dg dgd      }t        |      }t        |j                  g d       t	        |j
                  g d       t	        |j                  g d       t        |j                         d       t        |j                  |j                         t        |j                  d	       y )
Nr   r   r   r   r  r   r_   r   r   r   )r   r_   r   r   )r   r_   r   r_   rP  r|  r{  )r   r   r   r~  r   r|  r}  r   r  r   rO  r  s      r3   r  zTestCSC.test_constructor1  sx    <|<cBm!#((953;;y13::k2SZZ\!$SYYqww'SZZ&r5   c                     t        dd      }d|d<   t        |      }t        |j                  dg       t	        |j
                  dg       t	        |j                  g d       y )Nr  r   rZ  )r_   r|  r_   )r   r   r   r   r   r   r   )r   r   r   r~  r   r|  r}  r  s      r3   r  zTestCSC.test_constructor2  sN    %#m!#((A3/3;;s+3::o6r5   c                     t        ddgddgddggd      }t        |      }t        |j                  ddg       t	        |j
                  ddg       t	        |j                  g d       y )Nr   r   r_   r   r  )r   r   r   r~  r   r|  r}  r  s      r3   r  zTestCSC.test_constructor3  s\    Aq6Aq6Aq6*C0m!#((Aa513;;!u-3::g.r5   c                 :   t        g d      }t        g d      }t        g d      }t        ||f      }t        ||fd      }t        t	        d      j                  dd      |j                                t        g dg d	g d
ff      }|j                  dk(  sJ y )Nr  r  r  r,  r  r|  r   r  r   r  r_   )r   r	   r   r   r   r  r   r4  )r   r  r  r~  r  r{  s         r3   r  zTestCSC.test_constructor4  s    5656CDSI$r5)6":--a3S[[]C )i%;<=ww!||r5   c                     t        g d      }t        g d      }t        g d      }t        |||f      }t        |j                  d       y Nr  r  r  )r  r   )r   r   r   r   r   r}  r|  r~  r{  s        r3   r	  zTestCSC.test_constructor5  r
  r5   c                     g d}g d}g d}t        |||f      }t        |j                  d       t        t	        j
                  |j                  t        j                               y rS  )r   r   r   r   rC   rf   r8   r  rT  s        r3   r  zTestCSC.test_constructor6  sM    $01399U+cii)9)9:;r5   c                 ^   t        g d      }t        g d      }t        g d      }t        |||fd      }|j                         }|j                          t	        |j
                  d       t	        |j                  g d       t	        |j                         |j                                y )Nr  r  r   rO   r_   r  r   r  )r   r   r   r!  r   r4  r~  r   r  s         r3   r"  zTestCSC.test_eliminate_zeros  r#  r5   c                    t        d      }t        g d      }g d}t        |||fd      }|j                         }|j	                          t        |j                  g d       t        |j                         |j                                y )NrZ  r  r  rW  r  r  )r   r   r   r   rV  r   r|  r   )r   r~  r  r  r	  r
  s         r3   r  zTestCSC.test_sort_indices  sh    ayO$$S)8hhj3;;73;;=#++-8r5   c           	         t        t        j                  d      j                  dd      dz        }dD ]  }t	        t        t        |      d        t        ||             }t	        |j                  |j                         t        |j                  |j                         t        |j                  |j                         t        |j                          t        t        |      |j                                       y )N   r  r   g      5@r%  T)r   rC   r   r  r   r  r   r   r   r   r|  r}  r   r&  s       r3   r'  zTestCSC.test_ufuncs  r(  r5   c                 P   t        d      }t        g d      }t        g d      }t        |||fd      }t        d      }t        g d      }t        g d      }t        |||fd      }t        ||z   j	                         |j	                         |j	                         z          y )	NrZ  r  r  rW  r  r  r*  r+  )r   r   r   r   r   r  s         r3   r,  z TestCSC.test_unsorted_arithmetic#  r-  r5   c                    t        j                  dgdgdgg      }t        j                  g d      }t         j                  j                  d       t	        t         j                  j                  dd            }| j                  |      }|||f   }t        |      r|j                         }t        ||||f          y r/  r0  r1  s         r3   r2  z%TestCSC.test_fancy_indexing_broadcast.  r3  r5   c                     t        j                  dt         j                        }t        j                  dt         j                        }t        j                  d      }t        |||fd      }t        |||fd      }t        j                  dt         j                        }t        ||fd      }t        ||fd      }t	        d      }	t	        d	      }
t        |j                  j                  t         j                         t        |j                  j                  t         j                         t        |j                  j                  t         j                         t        |j                  j                  t         j                         t        |	j                  j                  t         j                         t        |
j                  j                  t         j                         |||||	|
fD ]  }||z    	 y )
Nr_   r^  r   )r>  r   r  )r@  r   r  r=  r?  )	rC   r   rS   r   r   r   r}  r8   r`   rA  s               r3   rC  zTestCSC.test_scalar_idx_dtype<  rD  r5   N)r   r   r   r  r   rC   r  rI  r   r]  r   r  r  r  r  r	  r  r"  r  r'  r,  r2  rC  rZ   r5   r3   r  r    sr    / / 88RWWbjj"--@K'7/,<	99
J	K"r5   r  c                   z    e Zd ZeZej                  ej                  ej                  gZ	d Z
d Zd Zd Zd Zd Zy)r   c                     t        d      }d|d<   d|d<   ||j                  z  }||j                  j                         z  }t        |j	                         |j	                                y )NrO   rO   rO   r  r  rZ  r  )r   r8  r   r   r   )r   rJ   r  r  s       r3   	test_multzTestDOK.test_mult\  sU    w##accEaccmmo199;		4r5   c                     | j                  d      }d|d<   d|d<   |dz   }t        ddgddgddgg      }t        |j                         |       |d	z   }|d	z   }t        |j                         |       y )
Nr  r	  r  r  rO   r   r  r8  )r   r   r   r   r  s      r3   test_add_nonzerozTestDOK.test_add_nonzerod  sz    NN5!##FB7RHr2h/0199;*FF199;*r5   c                     | j                  d      }d|d<   d|d<   t        |dz  j                         |j                         dz         t        |dz  j                         |j                         dz         y Nr  rd  r	  r  r  r8  r  r   r   r   rp  s     r3   test_dok_divide_scalarzTestDOK.test_dok_divide_scalarp  s_    NN5!##AbD>>+QYY[^<AaC==?AIIKM:r5   c                 d   d\  }}t        ||f      }d|d<   d|d<   d|d<   d|d	<   d
|d<   d|d<   t        |j                         d d |dz
  f   t        |             |j	                         }t        |j                         d d |dz
  f   t        |             ||}}|j                         }t        |j                  ||f       t        |j                         |dz
  d d f   t        |             |j                         }t        |j                         |dz
  d d f   t        |             y )N)r  r  r   r  r_   r  r   r   r|  r  rZ  r,  r  r  )	r   r   r   r   r_  r   r   r   r`  )r   rf  r  rG   r{  rL   rz  s          r3   test_convertzTestDOK.test_convertx  s   A1v ###### 	199;q1u-uQy9 ggi3;;=1Q3/q; QAKKMQWWq!f%199;qs1u-uQy9 ggi3;;=1Q/q;r5   c                 T   t        t        t               t        g dg dg dgd      }t        |      }t	        |j
                  |j
                         t	        |j                         |       t        |      }t	        |j                         |j                                g dg dg}t        |t        j                        }t	        |j
                  t        j                         |j                         }t	        |j
                  t        j                         t        ||       y )NrM  r  rN  r   r  r  r^  )r   r  r   r   r   r8   r   r   rC   r[  r   )r   rL   rJ   rc  r~  r   das          r3   	test_ctorzTestDOK.test_ctor  s    i, <|<cBqMQWWagg&QYY[!$ qMQYY[!))+.9%t2::.QWWbjj)YY[RXXrzz*2t$r5   c                     t        d      }d|d<   t        d|j                         vd       t        d      }d|d d df<   t        t        |j                               dk(  d       y )Nr3  r   r  zUnexpected entry (0,0) in keyszUnexpected entries in keys)r   r   keysr   rG  s      r3   test_ticket1160zTestDOK.test_ticket1160  s`    u# 	QVVX%'GH u!A#AFFH"$@Ar5   N)r   r   r   r   r   rC   rI  r   r]  r   rb  re  ri  rk  rn  rq  rZ   r5   r3   r   r   X  s>    I77BJJ6K5
+;<>%*Br5   r   )r  r  c                       e Zd ZeZej                  ej                  ej                  gZ	d Z
d Zd Zd Zd Zd Zd Zd Zd	 Zy
)TestLILc                    t        dt        j                        }d|d<   d|d<   t        dt        j                        }d|d<   d|d<   t	        j
                         dk7  r4t        ||j                  z  ||j                  z  j                                t        ||j                         j                  z  ||j                         j                  z  j                                y )Nr`  rO   r  y              4@ra  r^  ppc64le)
r   rC   r]  r   platformmachiner   r8  r   r   r  s      r3   test_dotzTestLIL.test_dot  s    (BMM*$$xr}}5$$ *q133wQSS(9(9(;<1q{{}.Q[[]__1D0M0M0OPr5   c                 t    t        d      }d|d<   |dz  }t        |d   d       |dz  }t        |d   d       y )Nr3  r_   r  r|  r   )r   r   )r   r9   s     r3   test_scalar_mulzTestLIL.test_scalar_mul  sC    v$aCQtWa aCQtWa r5   c                     | j                  d      }d|d<   d|d<   t        |dz  j                         |j                         dz         t        |dz  j                         |j                         dz         y rg  rh  rp  s     r3   test_truediv_scalarzTestLIL.test_truediv_scalar  sc    NN6"$$AF++-qyy{R/?@AE??,aiikAo>r5   c                    t        g dg dg      }t        g dg dg      }|||z   f|||z
  fd|dz  fd}|j                         D ]U  \  }\  }}|j                         } t        |d|z        |       t	        |j                         |j                                W t        dt        j                  d      	      }t        g d
      }|dd d fxx   |z  cc<   t	        |dd d f   j                         j                         |       y )Nr   r_   r   r  r  r   )addsubmulz__i%s__r  r   r^  )皙?r  r  r   )
r   ra  r   r   r   r   rC   r8   r   squeeze)r   rJ   rK   r~  opr   r9  r  s           r3   test_inplace_opszTestLIL.test_inplace_ops  s    	9-.	9-.1q5z1q5z1q5z# &*ZZ\!B!VVXF+GFIN+E2v~~/1A1A1CD	 &2 vRXXi%89/"	!Q$11QT7??,446:r5   c                     g dg dg}t        t        |            }t        |      D ]-  \  }}t        |j	                         t        ||   d             / y )Nr  r  r_   )ndmin)r   r   r  r   r   )r   row_datarK   r  r  s        r3   test_lil_iterationzTestLIL.test_lil_iteration  sG    y)uX'lFAss{{}eHQKq.IJ #r5   c                     t        d      }d|d<   d|d<   d|d<   d|d	<   d
|d<   |j                         }t        |      }t        |j                         |j                                y )Nr`  rO   r  r  ra  r  )r  r   r  )r   r  rM  )r  r  )r   r`  r   r   )r   rK   r  r  s       r3   test_lil_from_csrzTestLIL.test_lil_from_csr  se     x $$$$$GGIqM199;		4r5   c                     t        t        d      j                  dd            }t        |      }t	        |t        g d      ddf   j                         |t        g d      ddf          y )Nr  rZ  r  r_   r   )r'   r   r  r   r   r   r   )r   rE  rJ   s      r3   test_fancy_indexing_lilzTestLIL.test_fancy_indexing_lil	  sb    VBZ''1-.qMQuY'1,-557uY'1,-	/r5   c                    t        d      }d|d<   d|d<   d|d<   d|d	<   t        d      }d|d<   d|d
<   d|d<   d|d	<   d|d<   t        |j                  |      j                         |j                  |      j                                t        |j                  |      j                         g dg dg dg dg       y )Nr,  r   r  r_   r  r   r  r|  r   r	  r  rA  rB  r   r   r  )r   r  r   )r   r   r  r   )r   lrf  s      r3   test_point_wise_multiplyz TestLIL.test_point_wise_multiply  s    v$$$$v$$$$$1::a=002::a=002	4 	1::a=002%%%&(	)r5   c                 \    t        t        j                  d            }|dz  }d|dd d f<   y )Nr3  r?  r   )r   rC   r  r  s     r3   test_lil_multiply_removalz!TestLIL.test_lil_multiply_removal'  s*    rwwv'	R!Q$r5   N)r   r   r   r   r   rC   rI  r   r]  r   rx  rz  r|  r  r  r  r  r  r  rZ   r5   r3   rs  rs    sN    I77BJJ6KQ!?;(K5/).r5   rs  )r  c                       e Zd ZeZej                  ej                  ej                  gZ	d Z
d Zd Zd Zd Zej                   j#                  dd      d	        Zd
 Zd Zd Zd Zd Zd Zd Zy)TestCOOc                    t        g d      }t        g d      }t        g d      }t        |||ffd      }t        t        d      j	                  dd      |j                                t        dd	gd
d	gd
d	gfft        j                        }t        dd
gd
d	ggt        j                        }t        ||j                                y )Nr  r  r  r,  r  r|  r   r  r   r   r^  )r   r   r   r   r  r   rC   r  )r   r  r  r~  r  r  s         r3   r  zTestCOO.test_constructor17  s    5656CD$Cy)%06":--a3S[[]C 9a.Aq6Aq6*:;299M	1~1v.bii@5#++-0r5   c                     t        g d      }t        g d      }t        g d      }t        |||ffd      }t        g dg dg dg      }t        ||j                                y )N)
r   r   r_   r_   r_   r_   r   r   r_   r_   )
r   r_   r   r_   r   r   r   r   r   r_   )
r_   r  rn  rZ  r  r   r  r_   r   rl  r3  )r|  r  r   r  )rz  r  r   )r   r   r   r   )r   r  r  r~  r  r   s         r3   r  zTestCOO.test_constructor2E  sY    )*)*-.$Cy)%0ZJ783.r5   c                    t        d      }t        |j                  d       t        |j                  g        t        |j                  g        t        |j
                  g        t        |j                         t        d             y )Nr,  )r   r   r   r  r  r~  r   r   r   r  s     r3   r  zTestCOO.test_constructor3P  sX    399U+3772&3772&388B'3;;=%-8r5   c                     t        g dg dg dg      }t        |      }t        |j                         |       t        g d      }t        |      }t        |j                         |j	                  dd             t        j                  t        d      5  t        g dg d	g d
f       d d d        t        j                  t        d      5  t        g dd       d d d        y # 1 sw Y   =xY w# 1 sw Y   y xY w)Nr   r   r   r   )r  r   r   r   )r   r|  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   r  s      r3   r  zTestCOO.test_constructor4Z  s    Y  ! o3;;=#. Io3;;=#++a*<= ]]9,KL|(DE M ]]:-CDf5 ED	 ML EDs   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   r^  )r   r8   rC   r   )r   r~  r  s      r3   "test_constructor_data_ij_dtypeNonez*TestCOO.test_constructor_data_ij_dtypeNoneo  sB    s$!qc
+48yyBHHTN00000r5   FzCOO does not have a __getitem__runreasonc                      y r7   rZ   r   s    r3   rO  zTestCOO.test_iteratort      r5   c                 t    ddgg}t        |      j                         }t        |j                         |       y rd   )r   todiar   r   )r   r   rD  s      r3   test_todia_all_zeroszTestCOO.test_todia_all_zerosx  s0    Q%%'3;;=%0r5   c                    t        d      }|j                          t        ddgddgddgff      }|j                          t        |j                         ddgddgg       t        ddgddgddgff      }|j                          t        |j                         ddgddgg       t        |j                  dg       t        |j
                  dg       t        |j                  dg       y )Nr,  r   r_   r   r   )r   r:  r   r   r  r  r~  r  s     r3   test_sum_duplicateszTestCOO.test_sum_duplicates}  s    1Q%1Q%!A013;;=Aa5!A-81Q%1Q%!A013;;=Aa5!A-8377QC(377QC(388aS)r5   c                     t        g dg dg dff      }|j                         }t        |j                         |j                                y )Nr  r   r  )r   rW  r   r   )r   r  r=   s      r3   test_todok_duplicateszTestCOO.test_todok_duplicates  s7    )i%;<=iik3;;=#++-8r5   c                     t        g dg dg dff      }|j                         }t        |j                  dz   |j                         |j	                         }t        |j                  dz   |j                         y )Nr  r   r  r_   )r   r`  r   r4  r_  )r   r  rz  r{  s       r3   test_tocompressed_duplicatesz$TestCOO.test_tocompressed_duplicates  sX    )i%;<=iikSWWq[#''*iikSWWq[#''*r5   c                 P   t        g d      }t        g d      }t        g d      }t        |||ffd      }|j                         }|j                          t	        |j
                  dk7  j                                t        |j                         |j                                y )Nr  )r   r   r   r   r   r   r   r   r  r  r  r   )	r   r   r   r!  r   r~  allr   r   )r   r~  r  r  r	  r
  s         r3   r"  zTestCOO.test_eliminate_zeros  s~    -.,-,-$c
+6:hhjQ##%&3;;=#++-8r5   c                    g dg dg dg}d}t        |      }|j                  |      }t        |j                  |j                  u        |j                  |d      }t        |j                  |j                  u        |j                  |d      }t        t	        j
                  |j                  |j                                y )Nr  r  r  r  Fr  T)r   r  r   r~  rC   rI   )r   ri   	new_shaper9   r:   s        r3   test_reshape_copyzTestCOO.test_reshape_copy  s    lO<	sOIIi !&& !IIieI,!&& !IIidI+B''778r5   c                     t        dgdgdgffd      }t        dgdgdgffd      }t        |j                  dd      |k7  j                  dk(         t        |j                  dd	      |k7  j                  dk(         y )
Nr   i- r  )-   )r  r  r  r  r   r  )r   r   r  r4  )r   mat1mat2s      r3   test_large_dimensions_reshapez%TestCOO.test_large_dimensions_reshape  s     A3'TF 34oFA3$' 34oF 	oS9TAFF!KLoS9TAFF!KLr5   N)r   r   r   r   r   rC   rI  r   r]  r   r  r  r  r  r  r   r  xfailrO  r  r  r  r  r"  r  r  rZ   r5   r3   r  r  1  s     I77BJJ6K1	/96*1
 [[5)JK L1
*9
+99	Mr5   r  )r  r  r  r  r  c                      e Zd ZeZej                  ej                  ej                  gZ	d Z
ej                  j                  dd      d        Z ed      d        Zej                  j#                  d	      d
        Zd Zd Zd Z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   r|  )r   r_   r   r   )r   r   r   r|  r  r   r   r  r   r  r_   r  r  )r   rC   repeatr   r   r   )r   r  r~  r  s       r3   r  zTestDIA.test_constructor1  sj    <! " xx$++A1+5((8$Zwv>FFH!Lr5   FzDIA does not have a __getitem__r  c                      y r7   rZ   r   s    r3   rO  zTestDIA.test_iterator  r  r5   r   c                 8   t        t        j                  d            }t        |j                  j
                  t        j                         |j                  dd       t        |j                  j
                  t        j                         t        t        j                  d            }t        |j                  j
                  t        j                         |j                  dd       t        |j                  j
                  t        j                         y )Nr   )r   r_   r  r|  )	r   rC   r   r   r  r8   rS   r  r`   r   rf  s     r3   test_setdiag_dtypezTestDIA.test_setdiag_dtype  s    rvvay!QYY__bhh/			$!	QYY__bhh/rvvay!QYY__bhh/			$!	QYY__bhh/r5   zDIA stores extra zerosr  c                      y r7   rZ   r   s    r3   r  zTestDIA.test_getnnz_axis  r  r5   c                     t        g dgdgfd      }|j                         }t        |j                         j                         |       t        |j	                         j                         |       y )NrF  r  r  r  )r   r   r   r_  r`  )r   rf  r9  s      r3   test_convert_gh14555zTestDIA.test_convert_gh14555  sT    bT*&999;1779,,.91779,,.9r5   c                 &   t        ddgddgg      j                         }t        j                  |j                  |j
                  f|j                        }t        j                  t        j                  |      dkD        }|j                  |k(  sJ y )Nr   r_   r   r|  r   )
r   ra  rC   ravel_multi_indexr  r  r   r  diffr9  )r   rf  	flat_indsinds_are_sorteds       r3   test_tocoo_gh10050zTestDIA.test_tocoo_gh10050  st    AA'(..0((!%%A	&&!3a!78%%888r5   c                 ,   t        j                  g dg      j                  dd      }t        j                  g dt         j                        }t	        j
                  ||fd      }|j                         }|j                  j                  t         j                  k(  sJ |j                         }|j                  j                  t         j                  k(  sJ |j                         }|j                  j                  t         j                  k(  sJ y )	Nr  r   r   r  r  r^  r  r  )rC   r   r  rS   ru   	dia_arrayra  r  r8   r`  r|  r_  )r   r~  r  rD  r  rz  r{  s          r3   test_tocoo_tocsr_tocsc_gh19245z&TestDIA.test_tocoo_tocsr_tocsc_gh19245  s    xx'..qq.9((:RXX6gf=iikww}}(((iik{{  BHH,,,iik{{  BHH,,,r5   c                    t        ddgddgg      }|dz  }t        |t               sJ t        |j                         ddgddgg       |j	                  d      }t        |t               sJ t        |j                         ddgddgg       y )Nr   r_   r   r|  r   r  r  )r   rB   r   r   r  )r   rf  resres2s       r3   r  zTestDIA.test_mul_scalar  s    AA'(!e#z***3;;=Aq6Ar7*;<zz!}$
+++4<<>QFQG+<=r5   N)r   r   r   r   r   rC   rI  r   r]  r   r  r   r  r  rO  r   r  r   r  r  r  r  r  rZ   r5   r3   r  r    s     I77BJJ6KM [[5)JK L Q	0  	0 [[56 7:9-	>r5   r  )r  r  r  r  r  r  r  c                      e Zd ZeZej                  ej                  ej                  gZ	d Z
d Zd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zej,                  j/                  dd      d        Zej,                  j/                  dd      d        Zd Zej,                  j/                  dd      d        Zej,                  j9                  ed      d        Zy)r
  c                    t        g d      }t        g d      }t        d      }t        g dg dg      |d<   t        g dg dg      |d	<   t        g d
g dg      |d<   t        g dg dg      |d<   t        g dg dg dgg dg dg      }t        |||fd      }t	        |j                         |       t        |||f      }t	        |j                         |       y N)r   r_   r_   r|  )r   r_   r_   r   )r|  r_   r   r  r   r   r|  )r  r   rO   r   )r   r|  r  )r  r   r  r_   )r   rZ  rO   )r  r   r  r   r  r  r  r  r  r  )r   r   r   r   r   r   )r   r}  r|  r~  rJ   r  s         r3   r  zTestBSR.test_constructor1  s    y!	"W~"$ %Q#% &Q$& 'Q$& 'Q )Ii0772CD$wv.V<S[[]A& $wv./S[[]A&r5   c                    dD ]0  }t        |      }t        t        |      j                         |       2 t        d      }t        t        |d      j                         |       t        t        |d      j                         |       t	        g dg dg dgg d	g d
g      }t        t        |      j                         |       t        t        |d      j                         |       t        t        |d      j                         |       t        t        |d      j                         |       t        t        |d      j                         |       t        t        |d      j                         |       t        t        |d      j                         |       t        t        |d      j                         |       t	        g dg dg dgg d	g d
g      }t        t        |d      j                         |       y )N)r  r  r  )rO   r|  )r   r  r  )r|  r  r  r"  r  r  r  r  r  r   r  r  r  r  )r_   r  )r   r  r  )r   r   r   r   r   )r   r   rJ   s      r3   r  zTestBSR.test_constructor2(  s    BEeAA..0!4 B %LZV4<<>BZV4<<>B)Ii0772CDZ]**,a0Z199;Q?ZV4<<>BZV4<<>BZV4<<>BZW5==?CZW5==?CZW5==?C)Ii0772CDZV4<<>Br5   c                     g dg dg dff}t        ddgddgg      }t        t        |d	      j                         |       y )
Nr  r  r  r   r   r_   r   r  r"  )r   r   r   r   )r   argrJ   s      r3   r  zTestBSR.test_constructor3@  sA    '*+Aa5!A- Zv6>>@!Dr5   c                    d}t        j                  ||dft         j                        }t        j                  d|gt         j                        }t        j
                  |t         j                        }t        |||f|dfd       y )Nr  r   r^  r   F)r#  r   )rC   r  r   r   rS   r   r   )r   r  r~  r}  r|  s        r3   r  zTestBSR.test_constructor4F  sf     ww1ay01a&1))ARXX.D'6*q!f5Ir5   c                    d}t        j                  |      }t        j                  |||f      }t        j                  d|g      }t        j                  |      }t	        t
              5  t        |||f       d d d        t	        t
              5  t        |||fd       d d d        t	        t
              5  t        |||fd       d d d        y # 1 sw Y   ZxY w# 1 sw Y   >xY w# 1 sw Y   y xY w)Nr  r   r  r"  r  )rC   r  r   r   r   r   r   )r   r  	data_1dimr~  r}  r|  s         r3   r	  zTestBSR.test_constructor5O  s    GGAJ	ww1ay!1a&!))A,:&	7F34 ' :&gv.)D ' :&gv.&A '& '& '& '&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_   r^  r  r"  )rC   r   rS   r   r8   )r   rA   r}  r|  rL   s        r3   test_default_dtypezTestBSR.test_default_dtypec  s    3*sQCj)1a&1((Aq620FCww"((6*00000r5   c                 $   t        g d      }t        g d      }t        d      }t        g dg dg      |d<   t        g dg dg      |d	<   t        g d
g dg      |d<   t        g dg dg      |d<   t        g dg dg dgg dg dg      }t        |||fd      }|j	                         }|j                         j	                         }t        |j                         |       t        |j                         |j                                y r  )r   r   r   r   r`  ra  r   r   )r   r}  r|  r~  rJ   AbsrAcsrAcsr_via_coos           r3   test_bsr_tocsrzTestBSR.test_bsr_tocsrk  s    |$%Y"$ %Q#% &Q$& 'Q$& 'Q ,l;Y')4&1Azz|zz|))+T\\^Q'T\\^\%9%9%;<r5   c                 v   t        g dddgddgg      j                  }|j                  ddd      }t        g d      }t        g d      }t	        |||fd      }|j                         }|j                          t        |j                  d	       t        |j                         |j                                y )
Nr  r   r  r_   r  r   )r|  r  r  r  )
r   r8  r  r   r   r   r!  r   r4  r   r  s         r3   r"  zTestBSR.test_eliminate_zeros  s    ,!uaUm<>>||Bq#01y!$0?hhj377C(3;;=#++-8r5   c                 ^   t         j                  j                  d       t        t         j                  j                  d      d      }d|j                  |j                  dk  <   |j                          t        |j                  d       t        |j                  j                  d       d|j                  |j                  dk  <   |j                          t        |j                  d       t        |j                  j                  d	       t        |j                         t        j                  d             |j                          t        |j                  d       t        |j                  j                  d	       t        |j                         t        j                  d             y )
Nr   )r  r  r  r"  g?B   )r  r_   r   r>  r~  )rC   r   r]   r   r~  r!  r   r4  r   r   r   r   r  s     r3   test_eliminate_zeros_all_zeroz%TestBSR.test_eliminate_zeros_all_zero  s   
		qryy''1VD !"qvv}	QUUB166<<4 !"qvv}	QUUA166<<3199;(:; 	
QUUA166<<3199;(:;r5   c                     t        t        d      j                  dd      d      }t        |j                  d         j                  dd      }t	        ||z  |j                         |z         y )Nx   r  r  r|  rZ  r"  r   r  r   r   r  r   r   r   r!  s      r3   test_bsr_matveczTestBSR.test_bsr_matvec  sV    vg..s375I1771:&&r!,QqS!))+/*r5   c                     t        t        d      j                  dd      d      }t        |j                  d   dz        j                  dd      }t	        ||z  |j                         |z         y )	Nr  r  r  r  r"  r   r  r  r  r!  s      r3   test_bsr_matvecszTestBSR.test_bsr_matvecs  sZ    vg..s375I1771:a< ((A.QqS!))+/*r5   FzBSR does not have a __getitem__r  c                      y r7   rZ   r   s    r3   rO  zTestBSR.test_iterator  r  r5   zBSR does not have a __setitem__c                      y r7   rZ   r   s    r3   r  zTestBSR.test_setdiag  r  r5   c                 L   t        j                  g dg dg dg      }| j                  |d      }t        |j	                  d      d u        t        |j                         ddgd	dgd
dgg       |j	                  d       t        |j                         ddgd	dgg       |j	                  d       t        |j                         ddgd	dgddgg       |j	                  d       t        |j                         g dg dg dg       t        t        |j                  d       y )Nr  r  r  r  r"  r  r   r   r_   r   r  r  rM  r  r  r  r]  s      r3   test_resize_blockedzTestBSR.test_resize_blocked  s   HHl""$ % NN1N/ D()199;!Q*+Q*+Q)1 	2 	
199;!Q*+Q)1 	2	199;!Q*+Q*+Q)1 	2 	
199;)5)5)7 	8 	j!((F3r5   c                      y r7   rZ   r   s    r3   r  z"TestBSR.test_setdiag_comprehensive  r  r5   zexceeds memory limitr  c                 B   t        j                  dt         j                        }t        j                  dt         j                        }t        j                  d      }t        |||fd      }t        |||fd      }t        d      }t        d      }t	        |j
                  j                  t         j                         t	        |j
                  j                  t         j                         t	        |j
                  j                  t         j                         t	        |j
                  j                  t         j                         	 t        j                  d      }t        j                  d	      }	t        |||fd      }
t        |	||fd      }t	        |
j
                  j                  t         j                         t	        |j
                  j                  t         j                         |||||
|fD ]  }||z    	 y # t        t        f$ r d}
d}Y (w xY w)
Nr_   r^  r   r  r=  r  r?  )r   r   r>  )r   r   r@  )
rC   r   rS   r   r   r}  r8   r`   MemoryErrorr   )r   r}  r|  rB  rG   rL   rc  r   vals2vals3rd  re  r9   s                r3   rC  zTestBSR.test_scalar_idx_dtype  s    !288,((1BHH-xx	"gv.lCgv.jA|$z"QXX^^RXX.QXX^^RXX.QXX^^RXX.QXX^^RXX.
	HH_-EHH]+EE7F3<HAE7F3:FA22 Q1a#AE $ Z( 	AA	s   B&H HHN)r   r   r   r   r   rC   rI  r   r]  r   r  r  r  r  r	  r  r  r"  r  r  r  r   r  r  rO  r  r  r  skipifIS_COLABrC  rZ   r5   r3   r
  r
  
  s	    I77BJJ6K'.C0EJB(1=.	9<.+
+
 [[5)JK L [[5)JK L4. [[5)JK L [[)?@ Ar5   r
  )r  r  r  r  r  r  c                 j   |j                  dd      }t        j                  | j                  t        j                        s.t        j                  | j                  t        j
                        r|| f|z   S | f|z   |fz   S | dk(  j                         }| j                  dd      } | dddxx   dz  cc<   d| ddd<   |d   j                  dkD  r=t        d |D              }d|d   z  f|dd z   }d|d   z  dz   f|dd z   }d| |<   d| |<   t        d |D              }|| f|z   S | f|z   |dz  fz   S )	z-Duplicates entries to produce the same matrixr}  Nr   r_   r  r   c              3   &   K   | ]	  }|d      ywr  rZ   ).0ps     r3   	<genexpr>z&_same_sum_duplicate.<locals>.<genexpr>  s     ,)QAaD)s   c              3   >   K   | ]  }|j                  d         yw)r_   N)r  )r  r|  s     r3   r  z&_same_sum_duplicate.<locals>.<genexpr>  s     7$w"$s   )
poprC   rf   r8   r  unsignedintegerr  r  re   r  )r~  indsr;   r}  	zeros_pospospos1pos2s           r3   _same_sum_duplicater    sP   ZZ$'F	}}TZZ*	}}TZZ!3!34>7T>!7T>VI--##%I ;;qq;!D1INIDAJ |1,),,#a&{SW$#a&
}s12w&T
T
7$77D~w~w~!--r5   c                        e Zd Zd	 fd	Zej
                  j                  d      d        Zej
                  j                  d      d        Zej
                  j                  d      d        Z	 xZ
S )
_NonCanonicalMixinc                    t         |   } ||fi |}|j                         dk(  j                         }|d   j                  dkD  }|rZ|d   j                  dz  }t               5 }	|	j                  t        d       | j                  ||d   |   |d   |         }ddd       | j                  ||      }
d|vr|j                  |d<    ||
fi |}|j                  t        j                  t        j                  fv rd}nd}t        |j                         |j                         |	       |r&t!        |j"                  dk(  j%                                |S # 1 sw Y   xY w)
zcReplace D with a non-canonical equivalent: containing
        duplicate elements and explicit zerosr   r_   r  r   Nr   gh㈵>gHz>)rtol)superr   r   r  re   r   r  r!   _insert_explicit_zero_arg1_for_noncanonicalr   r8   rC   r[  r\  r   r   r~  any)r   r  sorted_indicesr;   	constructrE  zero_pos	has_zerosr  r  arg1NCr  rI  s                r3   r   z_NonCanonicalMixin.spcreator  sH    G%	a"6"IIK1$--/a[%%)	  !#A"$

24UV..q(1+a.(1+a.Q % **1n=& ggF7Ot&v& 88

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

aiik= RWW\&&() 	3 %$s   &6EE z"bool(matrix) counts explicit zerosr  c                      y r7   rZ   r   s    r3   r   z_NonCanonicalMixin.test_boolA  r  r5   z!getnnz-axis counts explicit zerosc                      y r7   rZ   r   s    r3   r  z#_NonCanonicalMixin.test_getnnz_axisE  r  r5   znnz counts explicit zerosc                      y r7   rZ   r   s    r3   r6  z_NonCanonicalMixin.test_emptyI  r  r5   F)r   r   r   r   r   r  r   r   r  r6  __classcell__)rI  s   @r3   r	  r	    s    #J [[AB C [[@A B [[89 :r5   r	  c                       e Zd ZddZd Zy)_NonCanonicalCompressedMixinc                    t        |j                  |j                  |j                        \  }}}|sOt	        ||dd       D ]=  \  }}||| ddd   j                         ||| ||| ddd   j                         ||| ? |||fS )5Return non-canonical constructor arg1 equivalent to M)r}  r   Nr  )r  r~  r|  r}  rN  r   )r   rE  r  r~  r|  r}  startstops           r3   r  z3_NonCanonicalCompressedMixin._arg1_for_noncanonicalO  s     3AFFAII;<88!Egv"66!":6t&-eD&9$B$&?&D&D&Fd##'d#3DbD#9#>#>#@U4   7 Wf$$r5   c                     d|||f<   |S rd   rZ   r   rE  r  r  s       r3   r  z2_NonCanonicalCompressedMixin._insert_explicit_zeroY  s    !A#r5   Nr  )r   r   r   r  r  rZ   r5   r3   r  r  N  s    %r5   r  c                       e Zd Zd Zd Zej                  j                  dd      d        Zej                  j                  dd      d        Z	y	)
_NonCanonicalCSMixinc                 l      fd}t         D ]%  }dD ]  } |t        j                  |      |         ' y )Nc                 @   t        g dg dg dg dg|       }	j                  ||      }|j                  \  }}t        | |      D ]*  }t        | |      D ]  }t	        |||f   |||f           , dD ]#  }t        t        t        f|j                  |       % y )NrA  r  r  rB  r^  )r  r  )	r   r   r   r   r   r   r  r  r  )
r8   r  r  rJ   rE  rH  r  r  r  r   s
            r3   r   z3_NonCanonicalCSMixin.test_getelement.<locals>.check`  s    w  (-.A q@A''CAaA2q\r1A 1Q31Q30 & " Cz95q}}bI Cr5   )FTr  )r   r   r8   r  s   `   r3   r  z$_NonCanonicalCSMixin.test_getelement_  s1    	J  &E"/bhhuo~6 #0 &r5   c                 d   t        j                  d      }| j                  |      }| j                  g dg      }|j                         |dd d f<   t	               5 }|j                  t        d       ||dd d f<   d d d        t        |j                         |       |j                         j                         |d d df<   t	               5 }|j                  t        d       |j                  |d d df<   d d d        t        |j                         |       y # 1 sw Y   xY w# 1 sw Y   0xY w)Nr   r  r   r  r_   )
rC   r   r   r   r   r  r!   r   rF  r8  )r   r  rJ   rK   r  s        r3   test_setitem_sparsez(_NonCanonicalCSMixin.test_setitem_sparset  s    FF1INN1NNG9%!A# CJJ.0QRAacF ! 	199;*""$!A# CJJ.0QRSSAacF ! 	199;* !  ! s    D*D&D#&D/Fz(inverse broken with non-canonical matrixr  c                      y r7   rZ   r   s    r3   rQ  z_NonCanonicalCSMixin.test_inv  r  r5   z&solve broken with non-canonical matrixc                      y r7   rZ   r   s    r3   r  z_NonCanonicalCSMixin.test_solve  r  r5   N)
r   r   r   r  r(  r   r  r  rQ  r  rZ   r5   r3   r$  r$  ^  s`    7*+" [[5)ST U [[5)QR Sr5   r$  c                       e Zd Zy)TestCSRNonCanonicalNr   r   r   rZ   r5   r3   r,  r,        r5   r,  c                       e Zd Zy)TestCSCNonCanonicalNr-  rZ   r5   r3   r0  r0    r.  r5   r0  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"  )r`  rX  r#  )r   rE  r  r  r9   s        r3   r  z)TestBSRNonCanonical._insert_explicit_zero  s/    GGI!A#www--r5   Fz&diagonal broken with non-canonical BSRr  c                      y r7   rZ   r   s    r3   r  z!TestBSRNonCanonical.test_diagonal  r  r5   z"expm broken with non-canonical BSRc                      y r7   rZ   r   s    r3   rM  zTestBSRNonCanonical.test_expm  r  r5   N)	r   r   r   r  r   r  r  r  rM  rZ   r5   r3   r2  r2    s[    .
 [[5)QR S [[5)MN Or5   r2  c                        e Zd ZddZd Zd Zy)TestCOONonCanonicalNc                 l    t        |j                  |j                  |j                        \  }}}|||ffS )r  )r  r~  r  r  )r   rE  r  r~  r  r  s         r3   r  z*TestCOONonCanonical._arg1_for_noncanonical  s1    ,QVVQUUAEEBc3c3Zr5   c                    t         j                  |j                  j                  j	                  d      |j                  f   |_        t         j                  |j
                  j                  j	                  |      |j
                  f   |_        t         j                  |j                  j                  j	                  |      |j                  f   |_        |S rd   )rC   r_r~  r8   r  r  r  r"  s       r3   r  z)TestCOONonCanonical._insert_explicit_zero  s    qvv||((+QVV34aeekk&&q)15501aeekk&&q)15501r5   c                 2   | j                  t        j                  d            }|j                          |j	                  ddgd       |j                          t        t        j                  t        j                  |j                        dk\               y )Nr   r_   r   r  r   )	r   rC   r   r:  r  r   r  r  r  r  s     r3   test_setdiag_noncanonicalz-TestCOONonCanonical.test_setdiag_noncanonical  sf    NN266!9%				1a&A		rwwquu~*+,r5   r7   )r   r   r   r  r  r<  rZ   r5   r3   r7  r7    s     
-r5   r7  c            	   #   $  K   t         t        t        t        t        t
        t        g} ddddddddd}| D ]  }t        t        |            D ]  }t        ||      }|j                  d      s!t        |d	d
      r/g }|j                  |      }t        |      r$|t        j                  j                  |      gz  }t        |dg       }|D ]"  }|j                   dv s|j#                  |       $ 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)rM  rQ  r  rC  r  r  r  r  r  r  Fr  
pytestmark)r  r   r  xslow)marks)r
  r  r  r  r  r   rs  sorteddirr   r  r  r   r   r  r   r   rE   param)	TEST_CLASSES
SKIP_TESTSr   method_namemethodr@  r/   markersr  s	            r3   cases_64bitrI    s    WgwWL =?A!A)P%B%B*G	J !#c(+KS+.F&&w/6 nn[19fkk..c.:;;E!&,;#Dyy$HHT* $ ll35AA , s   A*D-D;A"D2Dc                      e Zd ZeeeeegZd Z	d Z
d Zd Zd Zej                  j!                  d e             d        Zej                  j!                  d e             d        Zej                  j!                  d e             d	        Zej                  j!                  d e             d
        Zej                  j!                  d e             d        Zd Zy)	Test64Bitc                 N     |t         j                  j                  ||            S r7   )rC   r   r  )r   mat_clsrf  r  s       r3   _create_some_matrixzTest64Bit._create_some_matrix  s    ryy~~a+,,r5   c                    t        j                  |      }t        |t        t        t
        f      r4|j                  j                  |k(  xr |j                  j                  |k(  S t        |t              r4|j                  j                  |k(  xr |j                  j                  |k(  S t        |t              r|j                  j                  |k(  S t        d|d      )Nzmatrix z has no integer indices)rC   r8   rB   r   r   r   r|  r}  r   r  r  r   r  r   )r   rf  r8   s      r3   _compare_index_dtypezTest64Bit._compare_index_dtype  s    a*j*=>IIOOu,K188>>U3JK:&EEKK5(Dquu{{e/CD:&IIOOu,-wqe+BCDDr5   c                 `     t        d       fd       } j                  D ]
  } ||        y )NrO   rk   c                 B    | t         j                  j                  dd            }t        j	                  |t         j
                                | t         j                  j                  dd            }t        j	                  |t         j                               y )NrO   r   r  )rC   r   r  r   rP  rS   r`   )rM  rf  r   s     r3   r   z4Test64Bit.test_decorator_maxval_limit.<locals>.check  sg    		r1-.AD--a:;		r1-.AD--a:;r5   r   MAT_CLASSESr   r   rM  s   `  r3   test_decorator_maxval_limitz%Test64Bit.test_decorator_maxval_limit  s5     
!b	1	< 
2	< ''G'N (r5   c                 `     t        d       fd       } j                  D ]
  } ||        y )NTr   c                    d}d}t        d      D ]d  }j                  | dd      }|xs  j                  |t        j                        }|xs  j                  |t        j
                        }|sa|sd y  t        d      )NFr  r  z#both 32 and 64 bit indices not seen)r   rN  rP  rC   rS   r`   rm   )rM  seen_32seen_64r  rf  r   s        r3   r   z5Test64Bit.test_decorator_maxval_random.<locals>.check  s{    GG3Z,,Wa;!KT%>%>q"((%K!KT%>%>q"((%Kw   %%JKKr5   rT  rV  s   `  r3   test_decorator_maxval_randomz&Test64Bit.test_decorator_maxval_random  s7     
!	-
	L 
.
	L ''G'N (r5   c                 8    t        di |d        } |||       y )Nc                      |        }t        |d      r|j                          	  t        ||              t        |d      r|j                          y y # t        |d      r|j                          w w xY w)Nsetup_methodteardown_method)r  r`  r   ra  )r   rF  instances      r3   r   z*Test64Bit._check_resiliency.<locals>.check  sl    uHx0%%'/.+.08%67,,. 878%67,,. 8s   A A3rZ   )r   )r   r   rF  r   r   s        r3   _check_resiliencyzTest64Bit._check_resiliency  s*     
!	&2	&	/ 
'	/ 	c;r5   zcls,method_namec                 ,    | j                  ||d       y )NrO   rR  rc  r   r   rF  s      r3   test_resiliency_limit_10z"Test64Bit.test_resiliency_limit_10   s    sKbAr5   c                 ,    | j                  ||d       y )NTrY  re  rf  s      r3   test_resiliency_randomz Test64Bit.test_resiliency_random$  s    
 	sK=r5   c                 H    | j                  ||t        j                         y Nr[   )rc  rC   rS   rf  s      r3   test_resiliency_all_32z Test64Bit.test_resiliency_all_32+      sKRXXFr5   c                 H    | j                  ||t        j                         y rk  )rc  rC   r`   rf  s      r3   test_resiliency_all_64z Test64Bit.test_resiliency_all_64/  rn  r5   c                 ,    | j                  ||d       y )NT)r   re  rf  s      r3   
test_no_64zTest64Bit.test_no_643  s    sKdCr5   c                     t        t        j                  d      d        }t        t        j                        d        } |         |        y )Nr   )r[   rp   c                  P   t        ddgddgddgg      } t        t        | j                  d       t        t        | j                  d       t        g d	g d
g      } t        t        | j                  d       t        g d	g dg      } t        t        | j                  d       y Nr   r_   r   r|  rZ  r  r  r   r  )r   r|  r  r+  )r   r   rm   r  r  r   r   r   s    r3   check_limitedz3Test64Bit.test_downcast_intp.<locals>.check_limited>  s     QFQFQF34A.!((;.!%%a8Iy12A.!((;Iy12A.!((;r5   rl  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 ru  )r   r  r  r   r   r   s    r3   check_unlimitedz5Test64Bit.test_downcast_intp.<locals>.check_unlimitedL  sv     QFQFQF34AHH!HEEqEMIy12AHH!HIy12AHH!Hr5   )r   rC   r`   )r   rv  rx  s      r3   test_downcast_intpzTest64Bit.test_downcast_intp7  sN     
!RXX12
4
	<
4
	< 
!RXX	6
	 
7
	 	r5   N)r   r   r   r   r   r   r   r   rU  rN  rP  rW  r]  rc  r   r  parametrizerI  rg  ri  rm  rp  rr  ry  rZ   r5   r3   rK  rK    s   z:z:NK-	E& " [[.>B ?B [[.>> ?> [[.>G ?G [[.>G ?G [[.>D ?D#r5   rK  r7   )NFNNF)T)	TTTTTTTTT)rr  
contextlibr  r  rv  r  sysr   r   r   numpyrC   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   numpy.testingr   r   r   r   r   r   r   scipy.linalgrt   r  ru   r   r   r   r   r   r   r   r   r    r!   r"   scipy.sparse._baser#   scipy.sparse._sputilsr$   r%   r&   r'   r(   scipy.sparse.linalgr)   r*   r+   scipy._lib.decoratorr,   scipy._lib._utilr-   r   r  r4   r<   	frozensetr  rM   r	  r  r   r   r   r   r   r   r  r  r  r  r  r$  contextmanagerrW  rY  rn  rv  r  r  r  r  r  r  r   r  r   rs  r  r  r
  r  r	  r  r$  r,  r0  r2  r7  rI  rK  rZ   r5   r3   <module>r     s        
  *     , , ,  9 9 9 9 (F F / / * + ckk)/
'
 %eW- (  !   > " JN?DNb$ $6"$ "$H 8i7 i7X=d; d;Nc+ c+L% %.[ [|NK NKbS0 S0l B Bk$ k$\ L  LF_K _KD_0 _0DZ= Z=z8 888 AE8<JN,0%'Xz&! z&z    P! Pf    _Buu= _BD    nu- nb    FMu(-e/45J FMR    G>ueE/45',u> G>T    fu(-e/45).0 fR    .B0 0f#5  -7 -`	. 		. 	6 -,g -("BJ| |r5   