
    (phq                        S SK rS SKJr  S SKrS SKJr  S SKJrJ	r	  SSK
JrJr  S rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS r\R8                  R;                  S/ SQ5      S\4S j5       r\R8                  R;                  S\ " / SQ/ SQ5      5      S\!\\4   4S j5       r"\R8                  R;                  S/ SQ5      S\4S j5       r#S r$S r%S r&S  r'S! r(S" r)S# r*S$ r+\R8                  R;                  S%/ S&Q5      S' 5       r,\R8                  R;                  S%/ S&Q5      S( 5       r-\R8                  R;                  S%/ S&Q5      S) 5       r.\R8                  R;                  S%/ S&Q5      S* 5       r/S+ r0\R8                  R;                  S,/ S-Q5      S. 5       r1\R8                  R;                  S%/ S&Q5      S/ 5       r2\R8                  R;                  S%/ S&Q5      S0 5       r3\R8                  R;                  S1/ S2Q5      S3 5       r4S4 r5S5 r6\R8                  R;                  S%/ S&Q5      S6 5       r7\R8                  R;                  S%/ S&Q5      S7 5       r8S8 r9\R8                  R;                  S9/ S:Q5      S; 5       r:\R8                  R;                  S%/ S&Q5      S< 5       r;\R8                  R;                  S%/ S&Q5      S= 5       r<S> r=\R8                  R;                  S9/ S:Q5      S? 5       r>/ S@Qr?\R8                  R;                  SA\?5      SB 5       r@/ SCQrA\R8                  R;                  SD\A5      SE 5       rBSF rCSG rDSH rESI rFSJ rG/ SKQrH\R8                  R;                  S9\H5      SL 5       rISMSNSO/S /44SPSQSR/S /44SSSTS /S/44SUSVS SR/SRS/44SWSX/ SYQ/ SZQ44S[S\S]S]/ SYQ/ SYQ44/rJ\R8                  R;                  S^\J5      S_ 5       rKS` rL\R8                  R;                  Sa/ SbQ5      Sc 5       rM\R8                  R;                  S%/ SdQ5      Se 5       rN\R8                  R;                  S%/ SdQ5      Sf 5       rOg)g    N)assert_equal)
block_diag)	coo_arrayrandom_array   )_block_diag_extract_block_diagc                     [        S5      n U R                  S:X  d   e[        U R                  5       [        R
                  " S5      5        [        S5      nUR                  S:X  d   e[        UR                  5       [        R
                  " S5      5        [        S5      nUR                  S:X  d   e[        UR                  5       [        R
                  " S5      5        g )N   r   r   )r   r            r   shaper   toarraynpzeros)empty1dempty2dempty_nds      N/var/www/html/venv/lib/python3.13/site-packages/scipy/sparse/tests/test_coo.pytest_shape_constructorr   	   s    oG==D   "BHHTN3G==F""""BHHV$45%H>>[(((!!#RXXk%:;    c                  <   [        / SQ5      n U R                  S:X  d   e[        U R                  5       [        R
                  " / SQ5      5        [        / SQ/ SQ/5      nUR                  S:X  d   e[        UR                  5       [        R
                  " / SQ/ SQ/5      5        [        R
                  " SS/SS//S	S
/SS///SS/SS//SS
/SS	///SS/SS//SS/SS////5      n[        U5      nUR                  S:X  d   e[        UR                  5       U5        [        R                  R                  S5        [        R                  R                  SSSSS	S
SSS5	      n[        U5      nUR                  S:X  d   e[        UR                  5       U5        [        S[        R                  //SS//S
S	///5      nUR                  S:X  d   e[        UR                  5       [        R
                  " S[        R                  //SS//S
S	///5      5        g )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   r   r   )r   r   r   )
r   r   r   r   r   arrayrandomseedrandnnan)res1dres2darr4dres4darr9dres9dnan_3ds          r   test_dense_constructorr1      s   i E;;$"((9"56 y),-E;;&   "((Iy+A"BC HHAA'1a&1a&)9:AA'1a&1a&)9:AA'1a&1a&)9:< =E eE;;,&&&%( IINN2IIOOAa!Aa!A.EeE;;----%( !RVVAx1a&:;F<<9$$$!288q"&&k]aVH1vh,O#PQr   c            	         [        / SQSS9n U R                  S:X  d   e[        U R                  5       [        R
                  " / SQ5      5        [        / SQ/ SQ/SS9nUR                  S:X  d   e[        UR                  5       [        R
                  " / SQ/ SQ/5      5        [        S//S///SS9nUR                  S:X  d   e[        UR                  5       [        R
                  " S//S///5      5        [        R                  R                  S	5        [        R                  R                  S
SSSSSS
5      n[        USS9nUR                  S:X  d   e[        UR                  5       U5        g )Nr   r   r   r   r!   r   r   )r   r   r   r$   r   r   r   r    )r   r   r   r   r    r   r   )	r   r   r   r   r   r%   r&   r'   r(   )r*   r+   res3darr7dres7ds        r   !test_dense_constructor_with_shaper7   7   s%   it,E;;$"((9"56y),F;E;;&   "((Iy+A"BCusenI6E;;)###"((aSEQC5>":;IINN2IIOOAa!Aa*Eu_5E;;/)))%(r   c                  :   [         R                  " [        SS9   [        / SQSS9  S S S 5        [         R                  " [        SS9   [        / SQSS9  S S S 5        [         R                  " [        SS9   [        / SQ/SS9  S S S 5        [         R                  " [        SS9   [        S//S	///S
S9  S S S 5        [         R                  " [        SS9   [        S/S/44SS9  S S S 5        [         R                  " [        SS9   [        SS/SS/SS/SS/44SS9  S S S 5        [         R                  " [        SS9   [        S/S/445        S S S 5        [         R                  " [        SS9   [        S/S/S/S/445        S S S 5        g ! , (       d  f       GNq= f! , (       d  f       GNU= f! , (       d  f       GN8= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Ninconsistent shapesmatchr   r   r3   r   r   r   r   r   r   r   r   z)axis 0 index 2 exceeds matrix dimension 2r   r   )r   z)axis 1 index 3 exceeds matrix dimension 3r   )r   r   r   znegative axis 0 index: -1znegative axis 2 index: -1)pytestraises
ValueErrorr    r   r   .test_dense_constructor_with_inconsistent_shaperD   K   s   	z)>	?)4( 
@ 
z)>	?)6* 
@ 
z)>	?9+T* 
@ 
z)>	?QC5A3%.	2 
@ 
zH
JA3!-t,
J 
zH
JAa5Aq6Aq6Aq6239E
J 
z)D	EA3".! 
F 
z)D	EA3!qcB4()* 
F	E/ 
@	? 
@	? 
@	? 
@	?
J 
J
J 
J 
F	E 
F	Es_   FF#6F5%GGG*G;3H
F #
F25
G
G
G'*
G8;
H	
Hc                      [        S5      n [        U 5      nUR                  S:X  d   e[        UR                  5       [        R
                  " S5      5        g )Nr   r   )r   ress     r   test_1d_sparse_constructorrG   g   s?    oG
G
C99/r   c                      [        SS/SS/445      n U R                  S:X  d   e[        U R                  5       [        R
                  " / SQ5      5        g )Nr"   r#   r   r   r   )r   r"   r#   r   r   r   r   r   r%   rF   s    r   test_1d_tuple_constructorrK   n   sF    
aUaUH%
&C99 34r   c                      [        SS/SS/44SS9n U R                  S:X  d   e[        U R                  5       [        R
                  " / SQ5      5        g )Nr"   r#   r   r   r<   r3   )r   r"   r#   r   rI   rJ   s    r   $test_1d_tuple_constructor_with_shaperM   t   sH    
aUaUH%T
2C99 67r   c                     [        S5      n [        R                  " [        SS9   SU S'   S S S 5        [        R                  " [        SS9   U SS S 24     S S S 5        g ! , (       d  f       N:= f! , (       d  f       g = f)N)r   r   z3'coo_array' object does not support item assignmentr:   r   r   r   z''coo_array' object is not subscriptabler   )r   r@   rA   	TypeError)coo_2ds    r   test_non_subscriptabilityrR   y   sr    vF	yS
Ut
U 
yF
Hq!t
H 
H	
U 
U
H 
Hs   A
A0
A-0
A>c                     Su  p[         R                  " U S-
  /SS9[         R                  " US-
  /SS94n[        S/U4X4S9nUR                  X-  S45      nUR                  S   R
                  [         R
                  " S5      :X  d   eUR                  S   S   X-  S-
  :X  d   eUR                  X5      nUR                  S   R
                  [         R
                  " S5      :X  d   eUR                  S   S   US-
  :X  d   eg )	N)i i r   int32)dtypegffffff
@r3   r   int64)r   r%   r   reshapecoordsrU   )MNrX   ABCs         r   test_reshape_overflowr^      s    DAhhAwg.!a%0PQFC5&/!0A 	
		15!*A88A; 111188A;q>aeq[((( 	
		!A88A; 111188A;q>QU"""r   c            	         [        / SQ5      n U R                  S:X  d   eU R                  S5      nUR                  S:X  d   e[        UR	                  5       [
        R                  " S/S/S//5      5        U R                  S5      nUR                  S:X  d   e[        UR	                  5       [
        R                  " / SQ/5      5        [        R                  " [        SS	9   U R                  S
5        S S S 5        [        R                  " [        SS	9   U R                  S5        S S S 5        [        / SQ/ SQ/5      nUR                  S:X  d   eUR                  S5      nUR                  S:X  d   e[        UR	                  5       [
        R                  " / SQ5      5        UR                  S5      nUR                  S:X  d   e[        UR	                  5       [
        R                  " S/S/S//S/S/S///5      5        [        R                  " [        SS	9   UR                  S5        S S S 5        g ! , (       d  f       GNK= f! , (       d  f       GN*= f! , (       d  f       g = f)Nr   r   r   r   r=   r   r   r   r   r   zcannot reshape arrayr:   r   r   )r   r   r   r   r   r   r   r   r!   )r   )r   r   r   r   r   r   )r   r   r   r   )
r   r   rW   r   r   r   r%   r@   rA   rB   )arr1dcol_vecrow_vecarr2dflat	to_3d_arrs         r   test_reshaperk      s   i E;;$mmF#G==F""""BHHqcA3_$=>mmF#G==F""""BHHi[$9: 
z)?	@e 
A 
z)?	@e 
A y),-E;;&   ==D::*<!=> i(I??i'''""$bhh!qcA31#sQC/Q&RS 
z)?	@e 
A	@) 
A	@ 
A	@  
A	@s$   $H:II:
I	
I
I,c                      [        / SQ5      n U R                  S:X  d   eU R                  S:X  d   e[        / SQ/ SQ/5      nUR                  S:X  d   eUR                  S:X  d   eg )Nr`   r   r   rc   rd   r!   r   )r   r   nnzre   rh   s     r   test_nnzro      s_    i E;;$99>>y),-E;;&   99>>r   c            	      ~   [        / SQ5      R                  n U R                  S:X  d   e[        U R	                  5       [
        R                  " / SQ5      5        [        / SQ/ SQ/5      R                  nUR                  S:X  d   e[        UR	                  5       [
        R                  " SS/SS/SS	//5      5        g )
Nr`   r   rc   rd   r   r   r   r   r   )r   Tr   r   r   r   r%   rn   s     r   test_transposerr      s    i ""E;;$"((9"56y),-//E;;&   "((QFQFQF+C"DEr   c                     [        / SQ5      R                  SS9n U R                  S:X  d   e[        U R	                  5       [
        R                  " / SQ5      5        [        / SQ/ SQ/5      R                  SS9nUR                  S:X  d   e[        UR	                  5       [
        R                  " / SQ/ SQ/5      5        [        R                  " [        S	S
9   [        / SQ5      R                  SS9  S S S 5        [        R                  " [        SS
9   [        / SQ/ SQ/5      R                  SS9  S S S 5        g ! , (       d  f       NO= f! , (       d  f       g = f)Nr`   r   axesr   rc   rd   r   r   r!   "axes don't match matrix dimensionsr:   repeated axis in transposer   r   )
r   	transposer   r   r   r   r%   r@   rA   rB   rn   s     r   test_transpose_with_axisr|      s   i ***5E;;$"((9"56y),-77V7DE;;&   "((Iy+A"BC	z)M	N)&&F&3 
O 
z)E	F9i()333@ 
G	F 
O	N 
G	Fs   D>E>
E
Ec                      [        / SQ5      n [        U R                  [        R                  " / SQ5      5        [        U R
                  [        R                  " U R                  5      5        U R
                  R                  U R                  R                  :X  d   eU R
                  R                  R                  SL d   e/ SQU l        [        U R                  5      S:X  d   e[        U R                  [        R                  " / SQ5      5        U R
                  R                  U R                  R                  :X  d   e[        R                  " [        SS9   / SQU l        S S S 5        g ! , (       d  f       g = f)Nr   r   r   r   Fr   r   zcannot set row attributer:   )r   r   colr   r%   row
zeros_likerU   flags	writeablelenrX   r@   rA   rB   rJ   s    r   test_1d_row_and_colr      s    
K
 C"((9-."--0177==CGGMM)))77==""e+++CGszz?a"((9-.77==CGGMM)))	z)C	D 
E	D	Ds   
E//
E=c                     [        / SQ5      n U R                  U R                  U R                  U R                  4 H,  n[
        R                  " [        SS9   U" 5         S S S 5        M.     U R                  U R                  U R                  4 H0  n[        U" 5       R                  5       U R                  5       5        M2     g ! , (       d  f       M  = f)Nr~   zCannot convertr:   )r   tobsrtocsctodiatolilr@   rA   rB   tocootocsrtodokr   r   )rF   fs     r   test_1d_toformatsr      s    
K
 CiiCIIsyy9]]:-=>C ?> : iiCII.QS[[]CKKM2 / ?>s   C
C	arg)r   r   r   r    r#   c                     [         R                  " / SQ5      n[        U5      nUR                  U SS9  UR                  U 5        UR                  UR                  :X  d   e[        UR                  5       U5        g )Nr~   Frefcheckr   r%   r   resizer   r   r   r   denrF   s      r   test_1d_resizer      sZ    
((;
C
C.CJJsUJ#JJsO99		!!!$r   r   r   r   r   c                     [         R                  " / SQ5      n[        U5      nUR                  U SS9  UR                  U 5        UR                  UR                  :X  d   e[        UR                  5       U5        g )Nr`   Fr   r   r   s      r   test_1d_to_2d_resizer      sZ    
((9
C
C.CJJsUJ#JJsO99		!!!$r   )r   r   r   r#   c                     [         R                  " / SQ/ SQ/5      n[        U5      nUR                  U SS9  UR                  U 5        UR                  UR                  :X  d   e[        UR                  5       U5        g )Nr`   r   r   r   Fr   r   r   s      r   test_2d_to_1d_resizer     s_    
((Iy)
*C
C.CJJsUJ#JJsO99		!!!$r   c            	         [        / SQ/ SQ445      n U R                  S:X  d   e[        U R                  5       [        R
                  " SS/5      5        U R                  5         U R                  S:X  d   e[        U R                  5       [        R
                  " SS/5      5        [        / SQ/ SQ/ SQ/ SQ/ SQ445      nUR                  S:X  d   e[        R
                  " S	S	/S	S	/S	S	//S	S	/S	S	/S	S	//S	S	/S	S	/SS	///S	S	/S	S
/S	S	//S	S	/S	S	/S	S	//S	S	/S	S	/S	S	////5      n[        UR                  5       U5        UR                  5         UR                  S:X  d   e[        UR                  5       U5        [        / SQ/ SQ445      nUR                  S:X  d   eUR                  5         UR                  S:X  d   eg )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   rm   r   r   r   r%   sum_duplicates)re   r,   expected
arr_nodupss       r   test_sum_duplicatesr     s   y9,/0E99>>"((Aq6"23	99>>"((Aq6"23 y9iI"NOPE99>>xxq6Aq6Aq6
"aVaVaV$<1v1vPQSTv>V	Wq6Aq6Aq6
"aVaVaV$<1v1vPQSTv>V	W	YH (+	99>>(+ L</:;J>>Q>>Qr   c                  T   [        / SQ/ SQ445      n U R                  S:X  d   eU R                  5       S:X  d   e[        U R	                  5       [
        R                  " SS/5      5        U R                  5         U R                  S:X  d   eU R                  5       S:X  d   e[        U R	                  5       [
        R                  " SS/5      5        [        U R                  [
        R                  " S/5      5        [        U R                  [
        R                  " S/5      5        g )N)r   r   r   r   r   r   r   )
r   rm   count_nonzeror   r   r   r%   eliminate_zerosr   r   )re   s    r   test_eliminate_zerosr   1  s    y9,/0E99>> A%%%"((Aq6"23	99>> A%%%"((Aq6"23BHHaSM*BHHaSM*r   c                      [         R                  " / SQ5      n [         R                  " / SQ5      nX-   n[        U 5      U-   n[        U5      [        U5      L d   e[	        X25        g Nr   r   r   r   r   )r   r%   r   typer   den_aden_bexprF   s       r   test_1d_add_denser   >  sR    HH^$EHH\"E
-C
E
U
"C9S	!!!r   c                      [         R                  " / SQ5      n [         R                  " / SQ5      nX-   n[        U 5      [        U5      -   n[        X#R	                  5       5        g r   )r   r%   r   r   r   r   r   	dense_sum
sparse_sums       r   test_1d_add_sparser   G  sJ    HH^$EHH\"EI5!Ie$44J..01r   c                      [         R                  " / SQ5      n [         R                  " / SQ5      nX-  n[        U 5      U-  n[         R                  " U5      S:X  d   e[	        X25        g )Nr   r   r   )r   r%   r   ndimr   r   s       r   test_1d_matmul_vectorr   P  sR    HH^$EHH\"E
-C
E
U
"C773<1r   c                      [         R                  " / SQ5      n [         R                  " / SQ/ SQ/5      R                  nX-  n[        U 5      U-  n[	        U5      [	        U5      L d   e[        X25        g )Nr   r   r   r   r   r   )r   r%   rq   r   r   r   )r   otherr   rF   s       r   test_1d_matmul_multivectorr   Y  s\    
((>
"CHHlL1244E
+C
C.5
 C9S	!!!r   c                     [         R                  " / SQ/ SQ/5      n [        U 5      nX R                  -  nXR                  -  n[	        UR                  5       U5        [         R                  " / SQ/ SQ/5      n [        U 5      nX R                  -  nXR                  -  n[	        X25        [         R                  " / SQ/ SQ/5      n[         R                  " / SQ5      n[        U5      nXTR                  -  nXdR                  -  n[	        X25        [         R                  " / SQ5      n[         R                  " S/S/S	//5      nXE-  n[        U5      U-  n[	        X25        [        U5      [        U5      -  n[	        X25        g )
Nr   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   rq   r   r   list)r   rh   r   rF   r   r   re   s          r   test_2d_matmul_multivectorr   b  s.   
((L,/
0CcNE
+C
''/C$ ((O_5
6CcNE
+C
%%-C HHo78EHH_%EeE
''/C
''/C HHYEHHqcA3_%E
-C
E
U
"C
E
T%[
(Cr   c                      [         R                  " / SQ5      n [        R                  " [        SS9   [        U 5      R                  5         S S S 5        g ! , (       d  f       g = f)Nr   z diagonal requires two dimensionsr:   )r   r%   r@   rA   rB   r   diagonal)r   s    r   test_1d_diagonalr     s<    
((>
"C	z)K	L#! 
M	L	Ls   A
A#r   )rt   r   )r   r   r   r   r   )r   r   r   r`   )r   r"   r   r   r   r    c                     [         R                  R                  S5        [         R                  R                  SSU S9n[	        [        U5      R                  5       U5        g )Nr$   r   r    )lowhighsize)r   r&   r'   randintr   r   todense)r   arrs     r   test_nd_todenser     sF     IINN2
))



6C3'')3/r   c                     [        U 5      n[        U5      nUR                  U :X  d   e[        UR                  5       [        R
                  " U 5      5        g )Nr   )r   	empty_arrrF   s      r   test_nd_sparse_constructorr     sB     % I
I
C990r   c                     [         R                  R                  S5        [         R                  R                  " U 6 n[	        U5      nUR
                  U :X  d   e[        UR                  5       U5        g )Nr$   r   r&   r'   r(   r   r   r   r   r   r   rF   s      r   test_nd_tuple_constructorr     sQ     IINN2
))//5
!C
C.C99$r   c                     [         R                  R                  S5        [         R                  R                  " U 6 n[	        XS9nUR
                  U :X  d   e[        UR                  5       U5        g )Nr$   r3   r   r   s      r   $test_nd_tuple_constructor_with_shaper     sR     IINN2
))//5
!C
C
%C99$r   c                     [         R                  " [        SS9   [        SS/SS/SS/SS/44SS	9  S S S 5        [        / / / / / 44S
S	9n [	        U R                  5       [        R                  " S
5      5        g ! , (       d  f       NM= f)Nzexceeds matrix dimensionr:   r"   r#   r   r   r   )r   r   r   r3   )r   r   r   r   )r@   rA   rB   r   r   r   r   empty)r   s    r   (test_tuple_constructor_for_dim_size_zeror     s    	z)C	DAq6QFQFQF34GD 
E 2BB/0	BI""$bhhy&9:	 
E	Ds   A99
B)r   	new_shape))r   r"   r   r    )r   r      r   )r   )$      )r   )i8  )r   )r   r   r   r   r   r    r   c                 B   [         R                  R                  S5      n[        U SU[        S9nUR
                  U :X  d   eUR                  5       nUR                  U5      nUR                  U5      nUR
                  U:X  d   e[        UR                  5       U5        g N4e333333?densityrngrU   )	r   r&   default_rngr   intr   r   rW   r   )r   r   r   r,   den4dexp_arrres_arrs          r   test_nd_reshaper     s     ))


)CC@E;;%MMOEmmI&GmmI&G==I%%%"G,r   c                     [         R                  R                  S5      n[        U SU[        S9nUR
                  [         R                  " UR                  5       5      :X  d   eg r   )r   r&   r   r   r   rm   r   r   )r   r   r   s      r   test_nd_nnzr     sK     ))


)C
ucs#
>C77b&&s{{}5555r   c                    [         R                  R                  S5      n[        U SU[        S9nUR                  5       R                  nUR                  5       nUR                  U S S S2   :X  d   e[        X4R                  5       5        g )Nr   r   r   r?   )
r   r&   r   r   r   r   rq   r{   r   r   )r   r   r   r   	trans_arrs        r   test_nd_transposer     sm     ))


)C
ucs#
>CkkmooGI??eDbDk)))++-.r   )r   	axis_perm))r   rt   )r!   rw   ))r   r   r   r   r    r   )r   r   r   r    r   r   c                     [         R                  R                  S5      n[        U SU[        S9nUR                  US9n[        UR                  5       [         R
                  " UR                  5       US95        g )Nr   r   r   ru   )r   r&   r   r   r   r{   r   r   )r   r   r   r   r   s        r   test_nd_transpose_with_axisr     s\     ))


)C
ucs#
>C9-I""$bll3;;=y&QRr   c                  @   [         R                  " [        SS9   [        / SQ5      R	                  SS9  S S S 5        [         R                  " [        SS9   [        / SQ/ SQ/5      R	                  S	S9  S S S 5        g ! , (       d  f       NO= f! , (       d  f       g = f)
Nrx   r:   r`   rw   ru   ry   rc   rd   rz   )r@   rA   rB   r   r{   rC   r   r   %test_transpose_with_inconsistent_axisr     sv    	z)M	N)&&F&3 
O 
z)E	F9i()333@ 
G	F 
O	N 
G	Fs   A>B>
B
Bc            
         [        / SQ/ SQ/ SQ/ SQ445      n U R                  S:X  d   eU R                  5       S:X  d   e[        U R	                  5       [
        R                  " / SQ/ SQ// SQ/ SQ// SQ/ S	Q//5      5        U R                  5         U R                  S:X  d   eU R                  5       S:X  d   e[        U R	                  5       [
        R                  " / SQ/ SQ// SQ/ SQ// SQ/ S	Q//5      5        / SQ/ SQ/ SQ/ S
Q/ SQ4n[        / SQU45      nUR                  S:X  d   eUR                  5       S:X  d   eUR                  5         UR                  S:X  d   eUR                  5       S:X  d   e[        UR                  [
        R                  " / 5      5        [        UR                  [
        R                  " / 5      5        [        UR                  / / / / / 45        g )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   r   )r   r   r   r   )r   r   r   r   r   )r   rm   r   r   r   r   r%   r   r   r   rX   )arr3drX   arr5ds      r   test_nd_eliminate_zerosr     s   |lL,%OPQE99>> A%%%"((Y	,B%.	$:Y	<R,T #U V	99>> A%%%"((Y	,B%.	$:Y	<R,T #U V L,lSF|V,-E99>> A%%%	99>> A%%%BHHRL)BHHRL)BB34r   c                    [         R                  R                  S5      n[        U SU[        S9n[        U SU[        S9nUR                  5       UR                  5       pTXE-   nX%-   n[        U5      [        U5      L d   e[        Xv5        g r   r   r&   r   r   r   r   r   r   r   r   sp_xsp_yden_xden_yr   rF   s           r   test_nd_add_denser    w     ))


)Cs3?Ds3?D<<>4<<>5
-C
,C9S	!!!r   c                    [         R                  R                  S5      n[        U SU[        S9n[        U SU[        S9nUR                  5       UR                  5       pTXE-   nX#-   n[        XgR                  5       5        g r   r   r&   r   r   r   r   r   r   r   r  r  r  r  r   r   s           r   test_nd_add_sparser
    sj     ))


)C#SAD#SAD<<>4<<>5IJ..01r   c                     [         R                  " S/[         R                  //S/S///5      n [         R                  " S/S//S/S///5      nX-   n[        U 5      [        U5      -   n[	        X#R                  5       5        g Nr   r   r   r   r   )r   r%   infr   r   r   r   s       r   test_add_sparse_with_infr  %  x    HHsRVVHoqc{34EHHsQCjA3*-.EI5!Ie$44J..01r   )a_shapeb_shape))r   )r$   )r   r   )r   r    )r    r"   r   r   )r"   r    r   r   c                     [         R                  R                  S5      n[        U SU[        S9n[        USU[        S9n[
        R                  " [        SS9   X4-     S S S 5        g ! , (       d  f       g = f)Nr   r   r   z6(Incompatible|inconsistent) shapes|cannot be broadcastr:   r   r&   r   r   r   r@   rA   rB   r  r  r   arr_aarr_bs        r   +test_nd_add_sparse_with_inconsistent_shapesr  .  sb     ))


)C'CSDE'CSDE	zU
W
W 
W 
W   A''
A5c                    [         R                  R                  S5      n[        U SU[        S9n[        U SU[        S9nUR                  5       UR                  5       pTXE-
  nX%-
  n[        U5      [        U5      L d   e[        Xv5        g r   r   r   s           r   test_nd_sub_denser  ;  r  r   c                    [         R                  R                  S5      n[        U SU[        S9n[        U SU[        S9nUR                  5       UR                  5       pTXE-
  nX#-
  n[        XgR                  5       5        g r   r  r	  s           r   test_nd_sub_sparser  H  sj     ))


)Cs3?Ds3?D<<>4<<>5IJ..01r   c                     [         R                  " S/[         R                  //S/S///5      n [         R                  " S/S//S/S///5      nX-
  n[        U 5      [        U5      -
  n[	        X#R                  5       5        g r  )r   r%   r)   r   r   r   r   s       r   test_nd_sub_sparse_with_nanr   V  r  r   c                     [         R                  R                  S5      n[        U SU[        S9n[        USU[        S9n[
        R                  " [        SS9   X4-
    S S S 5        g ! , (       d  f       g = f)Nr   r   r   r9   r:   r  r  s        r   +test_nd_sub_sparse_with_inconsistent_shapesr"  _  sY     ))


)C'CSDE'CSDE	z)>	? 
@	?	?r  )	)r   r   r   r    r    rO   rt   ))r   r   r   r   r#   )r#   )r   r   r   r   rt   )r   r    r   r   r   r   r   )r   r    r$  r)  )r    r   )r   r=   )r<   r<   )	mat_shape	vec_shapec                    [         R                  R                  S5      n[        U SU[        S9n[        USU[        S9nUR                  5       UR                  5       peXV-  nX6-  n[        X5        U[        U5      -  n[        X5        g r   r   r&   r   r   r   r   r   r   )	r+  r,  r   r  r  r  r  r   rF   s	            r   test_nd_matmul_vectorr/  v  su    
))


)C	3CsCD	3CsCD<<>4<<>5
-C
,C
e
Cr   ))r#  )r   r   r    r   r%  r&  )r   r#   r   r   )r0  r=   )r'  r   r   ))r   r   r   r   )r   r    r   r   r   ))r   r   r   r   r   )r   r   r   r   )r<   )r   r   r   )r   )r    r   r   r   r   )r<   r1  r*  )
mat_shape1
mat_shape2c                 r   [         R                  R                  S5      n[        U SU[        S9n[        USU[        S9nUR                  5       UR                  5       peXV-  nX4-  n[        UR                  5       U5        X6-  n[        X5        U[        U5      -  n[        X5        XT-  n[        X5        g Nr   r   r   random_staterU   r.  )	r2  r3  r   r  r  r  r  r   rF   s	            r   test_nd_matmulr8    s    
))


)C
CcMD
CcMD<<>4<<>5
-C
+C$
,C
e
C ,Cr   c                     [         R                  R                  S5      n [        SSU [        S9n[        SSU [        S9n[
        R                  " [        SS9   X-    S S S 5        [
        R                  " [        SS9   XR                  5       -    S S S 5        [        SSU [        S9n[
        R                  " [        S	S9   X-    S S S 5        [
        R                  " [        S	S9   XR                  5       -    S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Ne= f! , (       d  f       g = f)
Nr   )r   r    r   r   r   r   r6  )r   r    r   r   r    z)matmul: dimension mismatch with signaturer:   )r   r    r   r   z&Batch dimensions are not broadcastable)	r   r&   r   r   r   r@   rA   rB   r   )r   r  r  sp_zs       r   .test_nd_matmul_sparse_with_inconsistent_arraysr;    s    
))


)CSs#NDSs#ND	z)T	U 
V	z)T	U 
V 	3SLD	z)Q	R 
S	z)Q	R 
S	R 
V	U	U	U 
S	R	R	Rs0   D?DD')D8
D
D$'
D58
Ec                  *   [        / SQ5      n [        / SQ5      n[        R                  " U R                  5       UR                  5       5      nU R                  U5      n[	        X25        U R                  UR                  5       5      n[	        X25        g )Nr   r   )r   r   dotr   r   )abr   rF   s       r   test_dot_1d_1dr@    sc    'A'A
&&aiik
*C
%%(C
%%		
Cr   c                      [        SS/SS/SS//5      n SnU R                  U5      n[        R                  " U R                  5       U5      n[	        UR                  5       U5        g )Nr   r   r   r   r    r   )r   r=  r   r   r   )r>  r?  rF   r   s       r   test_dot_sparse_scalarrB    sW    Aq6Aq6Aq6*+A	A
%%(C
&&a
 C$r   c                      [        SS//SS///5      n [        / SQ5      n[        R                  " [        SS9   U R	                  U5        S S S 5        g ! , (       d  f       g = f)Nr   r   r   r   r   znot aligned for n-D dotr:   )r   r@   rA   rB   r=  )r  r  s     r   !test_dot_with_inconsistent_shapesrD    sO    Ax1a&*+Ei E	z)B	C		% 
D	C	Cs   A
A#c                     [        SS/SS//5      n [        R                  " [        SS9   U R	                  S 5        S S S 5        [        R                  " [        SS9   U R                  S 5        S S S 5        [        R                  " [        SS9   U S -    S S S 5        [        R                  " [        SS9   S U -    S S S 5        g ! , (       d  f       N= f! , (       d  f       Nn= f! , (       d  f       NX= f! , (       d  f       g = f)	Nr   r   r   r   zargument not supported typer:   zarg not supported typezunsupported operand type)r   r@   rA   rP   r=  	tensordot)r  s    r   test_matmul_dot_not_implementedrG    s    1v1v&'E	y(E	F		$ 
G	y(@	A 
B	y(B	C 
D	y(B	Cu 
D	C 
G	F	A	A	C	C	C	Cs/   CCC)8C:
C
C&)
C7:
D)
)rb   rb   )r   r   r   r   ))r   r   r(  )r   r   r   r   r   )r$  r   r   r    r   )rJ  )r   r   ))r   r    rK  )rH  r   r   r   r   )r   r#   r   )r   r    r   r   r   )r   r    r   r   rL  c                    [         R                  R                  S5      n[        U SU[        S9n[        USU[        S9n[         R
                  " UR                  5       UR                  5       5      nUR                  UR                  5       5      n[        Xe5        UR                  [        UR                  5       5      5      n[        Xe5        UR                  U5      n[        UR                  5       U5        g r5  )	r   r&   r   r   r   r=  r   r   r   )r  r  r   r  r  r   rF   s          r   test_dot_ndrP    s    
))


)C#CsKE#CsKE
&&%--/
2C
))EMMO
$C
))D)
*C
))E
C$r   rH  rI  r   rJ  r   r   r$  rK  rN  rL  rM  )r   r    r   r#   r   r   )r   r   r   ))r   r    r   r   r   )r   r   r   r   r#   r   ))r   r    r   )r   r   r   r   )r   r   r   )r  r  rv   c                 *   [         R                  R                  S5      n[        U SU[        S9n[        USU[        S9n[         R
                  " UR                  5       UR                  5       US9nUR                  UR                  5       US9n[        Xv5        UR                  [        UR                  5       5      US9n[        Xv5        UR                  XRS9n[        U5      [        L a  [        UR                  5       U5        g [        Xv5        g )Nr   r   r6  ru   )r   r&   r   r   r   rF  r   r   r   r   r   )r  r  rv   r   r  r  r   rF   s           r   test_tensordotrR    s    
))


)C#CsKE#CsKE
,,u}}d
CC //%--//
5C
//$u}}/d/
;C //%/
+CCyIS[[]C(Sr   c                     [         R                  R                  S5      n [        SSU [        S9n[        SSU [        S9nS/S/4n[
        R                  " [        SS9   UR                  X#S	9  S S S 5        [        S
SU [        S9n[        SSU [        S9n/ SQSS/4n[
        R                  " [        SS9   UR                  X#S	9  S S S 5        g ! , (       d  f       Nh= f! , (       d  f       g = f)Nr   )r   r   r    r   r6  )r   r   r   r   z*sizes of the corresponding axes must matchr:   ru   )r    r   r   r   r   )r   r   r   r   )r   r   r   r   r   z,axes lists/tuples must be of the same length)	r   r&   r   r   r   r@   rA   rB   rF  )r   r  r  rv   s       r    test_tensordot_with_invalid_argsrT    s    
))


)C#CsKE#CsKEC!:D	z)U	V) 
W c3OECcMEaUD	z *& 
')
' 
' 
W	V
' 
's   C8C"
C"
C0)actual_shapebroadcast_shape)	))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"   )ra   )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   c                    [         R                  R                  S5      n[        U SU[        S9nUR                  U5      n[         R                  " UR                  5       U5      n[        UR                  5       U5        g r5  )	r   r&   r   r   r   _broadcast_tobroadcast_tor   r   )rU  rV  r   r   rF   r   s         r   test_broadcast_torZ  +  s^     ))


)C
|Ss#
NC


O
,C
//#++-
9C$r   ))r   r    r   r   r#   r  r  )r"   r    r   r   r   c                    [         R                  R                  S5      n[        U SU[        S9nUR                  5       n[	        [         R                  " UR                  S S 5      5      nUR                  U4UR                  SS  -   5      n[        U5       Vs/ s H  oeUS S 2S S 24   PM     nn[        U6 n[        U5      n	[        U	R                  5       U5        g s  snf )Nr   r   r6  r   )r   r&   r   r   r   r   prodr   rW   ranger   r   r   )
r   r   r  r  
num_slicesreshaped_arrayimatricesr   rF   s
             r   test_block_diagrb  9  s     ))


)CsCHDLLNE RWWU[["-./J]]J=5;;rs3C#CDN16z1BC1BAq!Qw'1BHC
h
C
d
C$ Ds   C c                     [         R                  R                  S5      n[        U SU[        S9n[        [        U5      U 5      n[        UR                  5       UR                  5       5        g r5  )	r   r&   r   r   r   r	   r   r   r   )r   r   r  rF   s       r   test_extract_block_diagrd  L  sO     ))


)CsCHD
k$/
7C/r   )Pnumpyr   numpy.testingr   r@   scipy.linalgr   scipy.sparser   r   _coor   r	   r   r1   r7   rD   rG   rK   rM   rR   r^   rk   ro   rr   r|   r   r   markparametrizer   r   ziptupler   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"  mat_vec_shapesr/  mat_mat_shapesr8  r;  r@  rB  rD  rG  
dot_shapesrP  tensordot_shapes_and_axesrR  rT  rZ  rb  rd  rC   r   r   <module>rr     sh    &  # 0 3<R@)(+8058
	# "JFA  3 0% % 1% L, ?@%eCHo % A% -%c % .%8
+2B"  #; <0<0  #; <1<1  #; <%<%  #; <%<%; / 2Q R-	R-  #; <6<6  #; </</ / 2S TSTSA54  #; <<  #; <2<22 / 2K LL  #; <<  #; <	2<	22 / 2K LL
 3^D
 E
 5~F G* "%	
 /<% =%$ EQC!:sQCj!	9sQCj!	QFQF+,kIy12!g	9-.	  79RS T,*& <MN
%N
% ' %> ?%?%" ' %> ?0?0r   