
    _Mhq                        d dl Zd dlmZ d dlZd dlmZ d dlmZm	Z	 ddl
mZm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                            dg d          defd            Zej                            d e g dg d                    de!eef         fd            Z"ej                            dg d          defd            Z#d Z$d Z%d Z&d  Z'd! Z(d" Z)d# Z*d$ Z+ej                            d%g d&          d'             Z,ej                            d%g d&          d(             Z-ej                            d%g d&          d)             Z.ej                            d%g d&          d*             Z/d+ Z0ej                            d,g d-          d.             Z1ej                            d%g d&          d/             Z2ej                            d%g d&          d0             Z3ej                            d1g d2          d3             Z4d4 Z5d5 Z6ej                            d%g d&          d6             Z7ej                            d%g d&          d7             Z8d8 Z9ej                            d9g d:          d;             Z:ej                            d%g d&          d<             Z;ej                            d%g d&          d=             Z<d> Z=ej                            d9g d:          d?             Z>g d@Z?ej                            dAe?          dB             Z@g dCZAej                            dDeA          dE             ZBdF ZCdG ZDdH ZEdI ZFdJ ZGg dKZHej                            d9eH          dL             ZIdMdNdOgd gffdPdQdRgd gffdSdTd gdgffdUdVd dRgdRdgffdWdXg dYg dZffd[d\d]d]g dYg dYffgZJej                            d^eJ          d_             ZKd` ZLej                            dag db          dc             ZMej                            d%g dd          de             ZNej                            d%g dd          df             ZOdS )g    N)assert_equal)
block_diag)	coo_arrayrandom_array   )_block_diag_extract_block_diagc                     t          d          } | j        dk    sJ t          |                                 t	          j        d                     t          d          }|j        dk    sJ t          |                                t	          j        d                     t          d          }|j        dk    sJ t          |                                t	          j        d                     d S )N   r   r   )r   r            r   shaper   toarraynpzeros)empty1dempty2dempty_nds      [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/sparse/tests/test_coo.pytest_shape_constructorr   	   s    ooG=D    ""BHTNN333G=F""""""BHV$4$4555%%H>[((((!!##RXk%:%:;;;;;    c                  d   t          g d          } | j        dk    sJ t          |                                 t	          j        g d                     t          g dg dg          }|j        dk    sJ t          |                                t	          j        g dg dg                     t	          j        ddgddggd	d
gddgggddgddggdd
gdd	gggddgddggddgddgggg          }t          |          }|j        dk    sJ t          |                                |           t          j                            d           t          j                            ddddd	d
ddd	  	        }t          |          }|j        dk    sJ t          |                                |           t          dt          j	        ggddggd
d	ggg          }|j        dk    sJ t          |                                t	          j        dt          j	        ggddggd
d	ggg                     d S )N   r   r   r   r      r   r   r   r   r   r   r   r   r    	   r   r      )r   r   r   r      )	r   r   r   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      sU   iii  E;$"(999"5"5666 yyy))),--E;&    "(IIIyyy+A"B"BCCC HAA'1a&1a&)9:AA'1a&1a&)9:AA'1a&1a&)9:< = =E eE;,&&&&%((( INN2IOOAa!Aa!A..EeE;-----%((( !RVAx1a&:;;F<9$$$$!!28q"&k]aVH1vh,O#P#PQQQQQr   c            	      2   t          g dd          } | j        dk    sJ t          |                                 t	          j        g d                     t          g dg dgd          }|j        dk    sJ t          |                                t	          j        g dg dg                     t          dggdgggd          }|j        dk    sJ t          |                                t	          j        dggdggg                     t          j                            d	           t          j                            d
dddddd
          }t          |d          }|j        dk    sJ t          |                                |           d S )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   iiit,,,E;$"(999"5"5666yyy))),F;;;E;&    "(IIIyyy+A"B"BCCCusenI666E;)####"(aSEQC5>":":;;;INN2IOOAa!Aa**Eu_555E;/))))%(((((r   c                     t          j        t          d          5  t          g dd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          g dd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          g dgd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          dggd	gggd
           d d d            n# 1 swxY w Y   t          j        t          d          5  t          dgdgffd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          ddgddgddgddgffd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          dgdgff           d d d            n# 1 swxY w Y   t          j        t          d          5  t          dgdgdgdgff           d d d            d S # 1 swxY w Y   d S )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)>	?	?	? + +999+T****+ + + + + + + + + + + + + + + 
z)>	?	?	? 3 3QC5A3%.	22223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 
zH
J 
J 
J - -A3!-t,,,,- - - - - - - - - - - - - - - 
zH
J 
J 
J F FAa5Aq6Aq6Aq6239EEEEF F F F F F F F F F F F F F F 
z)D	E	E	E " "A3".!!!" " " " " " " " " " " " " " " 
z)D	E	E	E + +A3!qcB4()***+ + + + + + + + + + + + + + + + + +s   <A A "BB	B(C		CC/DDD9EE #E F--F14F1G44G8;G8I  IIc                      t          d          } t          |           }|j        dk    sJ t          |                                t	          j        d                     d S )Nr   r   )r   ress     r   test_1d_sparse_constructorrG   g   sS    ooG
G

C9/////r   c                      t          ddgddgff          } | j        dk    sJ t          |                                 t	          j        g d                     d S )Nr"   r#   r   r   r   )r   r"   r#   r   r   r   r   r   r%   rF   s    r   test_1d_tuple_constructorrK   n   s]    
aUaUH%
&
&C9 3 344444r   c                      t          ddgddgffd          } | j        dk    sJ t          |                                 t	          j        g d                     d S )Nr"   r#   r   r   r<   r3   )r   r"   r#   r   rI   rJ   s    r   $test_1d_tuple_constructor_with_shaperM   t   sb    
aUaUH%T
2
2
2C9 6 677777r   c                     t          d          } t          j        t          d          5  d| d<   d d d            n# 1 swxY w Y   t          j        t          d          5  | dd d f          d d d            d S # 1 swxY w Y   d S )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   s"   vF	yS
U 
U 
U  t               
yF
H 
H 
H  q!!!t                 s!   =AA#A==BBc                  "   d\  } }t          j        | dz
  gd          t          j        |dz
  gd          f}t          dg|f| |f          }|                    | |z  df          }|j        d         j        t          j        d          k    sJ |j        d         d         | |z  dz
  k    sJ |                    ||           }|j        d         j        t          j        d          k    sJ |j        d         d         |dz
  k    sJ d S )	N)i i r   int32)dtypegffffff
@r3   r   int64)r   r%   r   reshapecoordsrU   )MNrX   ABCs         r   test_reshape_overflowr^      s   DAqhAwg...!a%0P0P0PQFC5&/!Q000A 	
		1q5!*A8A; 1 111118A;q>a!eq[(((( 	
		!QA8A; 1 111118A;q>QU""""""r   c            	         t          g d          } | j        dk    sJ |                     d          }|j        dk    sJ t          |                                t          j        dgdgdgg                     |                     d          }|j        dk    sJ t          |                                t          j        g dg                     t          j        t          d	          5  |                     d
           d d d            n# 1 swxY w Y   t          j        t          d	          5  |                     d           d d d            n# 1 swxY w Y   t          g dg dg          }|j        dk    sJ |                    d          }|j        dk    sJ t          |                                t          j        g d                     |                    d          }|j        dk    sJ t          |                                t          j        dgdgdggdgdgdggg                     t          j        t          d	          5  |                    d           d d d            d S # 1 swxY w Y   d S )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      s9   iii  E;$mmF##G=F""""""BHqcA3_$=$=>>>mmF##G=F""""""BHiii[$9$9::: 
z)?	@	@	@  e               
z)?	@	@	@  e               yyy))),--E;&    ==D:*<*<*<!=!=>>> i((I?i''''""$$bh!qcA31#sQC/Q&R&RSSS 
z)?	@	@	@  e                 s6   /DDD7EE EJ  JJc                      t          g d          } | j        dk    sJ | j        dk    sJ t          g dg dg          }|j        dk    sJ |j        dk    sJ d S )Nr`   r   r   rc   rd   r!   r   )r   r   nnzre   rh   s     r   test_nnzro      su    iii  E;$9>>>>yyy))),--E;&    9>>>>>>r   c            	         t          g d          j        } | j        dk    sJ t          |                                 t          j        g d                     t          g dg dg          j        }|j        dk    sJ t          |                                t          j        ddgddgdd	gg                     d S )
Nr`   r   rc   rd   r   r   r   r   r   )r   Tr   r   r   r   r%   rn   s     r   test_transposerr      s    iii  "E;$"(999"5"5666yyy))),--/E;&    "(QFQFQF+C"D"DEEEEEr   c                      t          g d                              d          } | j        dk    sJ t          |                                 t          j        g d                     t          g dg dg                              d          }|j        dk    sJ t          |                                t          j        g dg dg                     t          j        t          d	
          5  t          g d                              d           d d d            n# 1 swxY w Y   t          j        t          d
          5  t          g dg dg                              d           d d d            d S # 1 swxY w Y   d S )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   iii  ***55E;$"(999"5"5666yyy))),--77V7DDE;&    "(IIIyyy+A"B"BCCC	z)M	N	N	N 4 4)))&&F&3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 
z)E	F	F	F A A999iii())333@@@A A A A A A A A A A A A A A A A A As$   4&D&&D*-D**FF
Fc                  ~   t          g d          } t          | j        t          j        g d                     t          | j        t          j        | j                             | j        j        | j        j        k    sJ | j        j        j	        du sJ g d| _        t          | j                  dk    sJ t          | j        t          j        g d                     | j        j        | j        j        k    sJ t          j        t          d          5  g d| _        d d d            d S # 1 swxY w Y   d S )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      sd   
KKK
 
 C"(999--..."-001117=CGM))))7="e++++iiCGsz??a"(999--...7=CGM))))	z)C	D	D	D  ))                 s   
D22D69D6c                     t          g d          } | j        | j        | j        | j        fD ]?}t          j        t          d          5   |             d d d            n# 1 swxY w Y   @| j        | j	        | j
        fD ]>}t           |                                            |                                            ?d S )Nr~   zCannot convertr:   )r   tobsrtocsctodiatolilr@   rA   rB   tocootocsrtodokr   r   )rF   fs     r   test_1d_toformatsr      s    
KKK
 
 CiCIsy9  ]:-=>>> 	 	ACCC	 	 	 	 	 	 	 	 	 	 	 	 	 	 	iCI. 3 3QQSS[[]]CKKMM22223 3s   	A  A$	'A$	arg)r   r   r   r    r#   c                    t          j        g d          }t          |          }|                    | d           |                    |            |j        |j        k    sJ t          |                                |           d S )Nr~   Frefcheckr   r%   r   resizer   r   r   r   denrF   s      r   test_1d_resizer      sx    
(;;;

C
C..CJJsUJ###JJsOOO9	!!!!$$$$$r   r   r   r   r   c                    t          j        g d          }t          |          }|                    | d           |                    |            |j        |j        k    sJ t          |                                |           d S )Nr`   Fr   r   r   s      r   test_1d_to_2d_resizer      sx    
(999

C
C..CJJsUJ###JJsOOO9	!!!!$$$$$r   )r   r   r   r#   c                    t          j        g dg dg          }t          |          }|                    | d           |                    |            |j        |j        k    sJ t          |                                |           d S )Nr`   r   r   r   Fr   r   r   s      r   test_2d_to_1d_resizer     s    
(IIIyyy)
*
*C
C..CJJsUJ###JJsOOO9	!!!!$$$$$r   c            	         t          g dg dff          } | j        dk    sJ t          |                                 t	          j        ddg                     |                                  | j        dk    sJ t          |                                 t	          j        ddg                     t          g dg dg dg dg dff          }|j        dk    sJ t	          j        d	d	gd	d	gd	d	ggd	d	gd	d	gd	d	ggd	d	gd	d	gdd	gggd	d	gd	d
gd	d	ggd	d	gd	d	gd	d	ggd	d	gd	d	gd	d	gggg          }t          |                                |           |                                 |j        dk    sJ t          |                                |           t          g dg dff          }|j        dk    sJ |                                 |j        dk    sJ d S )N)r   r   r   r   r   r   r   r   r   )r   r   r   )r   r   r   )r   r   r   r   r"   r   r   r   r   r   )r   rm   r   r   r   r%   sum_duplicates)re   r,   expected
arr_nodupss       r   test_sum_duplicatesr     s*   yyy999,/00E9>>>>"(Aq6"2"2333	9>>>>"(Aq6"2"2333 yyy999iiiIII"NOPPE9>>>>xq6Aq6Aq6
"aVaVaV$<1v1vPQSTv>V	Wq6Aq6Aq6
"aVaVaV$<1v1vPQSTv>V	W	Y H (+++	9>>>>(+++ LLL<<</:;;J>Q>Qr   c                  n   t          g dg dff          } | j        dk    sJ |                                 dk    sJ t          |                                 t          j        ddg                     |                                  | j        dk    sJ |                                 dk    sJ t          |                                 t          j        ddg                     t          | j        t          j        dg                     t          | j	        t          j        dg                     d S )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   yyy999,/00E9>>>>  A%%%%"(Aq6"2"2333	9>>>>  A%%%%"(Aq6"2"2333BHaSMM***BHaSMM*****r   c                      t          j        g d          } t          j        g d          }| |z   }t          |           |z   }t          |          t          |          u sJ t	          ||           d S Nr   r   r   r   r   )r   r%   r   typer   den_aden_bexprF   s       r   test_1d_add_denser   >  sv    H^^^$$EH\\\""E
%-C
E

U
"C99S		!!!!cr   c                      t          j        g d          } t          j        g d          }| |z   }t          |           t          |          z   }t          ||                                           d S r   )r   r%   r   r   r   r   r   	dense_sum
sparse_sums       r   test_1d_add_sparser   G  sm    H^^^$$EH\\\""EI5!!Ie$4$44JJ..0011111r   c                      t          j        g d          } t          j        g d          }| |z  }t          |           |z  }t          j        |          dk    sJ t	          ||           d S )Nr   r   r   )r   r%   r   ndimr   r   s       r   test_1d_matmul_vectorr   P  sr    H^^^$$EH\\\""E
%-C
E

U
"C73<<1cr   c                      t          j        g d          } t          j        g dg dg          j        }| |z  }t          |           |z  }t	          |          t	          |          u sJ t          ||           d S )Nr   r   r   r   r   r   )r   r%   rq   r   r   r   )r   otherr   rF   s       r   test_1d_matmul_multivectorr   Y  s    
(>>>
"
"CHlllLLL1224E
+C
C..5
 C99S		!!!!cr   c                  0   t          j        g dg dg          } t          |           }| | j        z  }||j        z  }t	          |                                |           t          j        g dg dg          } t          |           }| | j        z  }|| j        z  }t	          ||           t          j        g dg dg          }t          j        g d          }t          |          }||j        z  }||j        z  }t	          ||           t          j        g d          }t          j        dgdgd	gg          }||z  }t          |          |z  }t	          ||           t          |          t          |          z  }t	          ||           d S )
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   
(LLL,,,/
0
0CcNNE
+C
%'/C$$$ (OOO___5
6
6CcNNE
+C
#%-Cc Hooo788EH___%%EeE
%'/C
%'/Cc HYYYEHqcA3_%%E
%-C
E

U
"Cc
E

T%[[
(Ccr   c                      t          j        g d          } t          j        t          d          5  t          |                                            d d d            d S # 1 swxY w Y   d S )Nr   z diagonal requires two dimensionsr:   )r   r%   r@   rA   rB   r   diagonal)r   s    r   test_1d_diagonalr     s    
(>>>
"
"C	z)K	L	L	L " "#!!!" " " " " " " " " " " " " " " " " "s   "A!!A%(A%r   )rt   r   )r   r   r   r   r   )r   r   r   r`   )r   r"   r   r   r   r    c                     t           j                            d           t           j                            dd|           }t	          t          |                                          |           d S )Nr$   r   r    )lowhighsize)r   r&   r'   randintr   r   todense)r   arrs     r   test_nd_todenser     s\     INN2
)



6
6C3''))3/////r   c                     t          |           }t          |          }|j        | k    sJ t          |                                t	          j        |                      d S Nr   )r   	empty_arrrF   s      r   test_nd_sparse_constructorr     sW     %  I
I

C900000r   c                     t           j                            d           t          j        j        |  }t	          |          }|j        | k    sJ t          |                                |           d S )Nr$   r   r&   r'   r(   r   r   r   r   r   r   rF   s      r   test_nd_tuple_constructorr     sb     INN2
)/5
!C
C..C9$$$$$r   c                     t           j                            d           t          j        j        |  }t	          ||           }|j        | k    sJ t          |                                |           d S )Nr$   r3   r   r   s      r   $test_nd_tuple_constructor_with_shaper     si     INN2
)/5
!C
Cu
%
%
%C9$$$$$r   c                  >   t          j        t          d          5  t          ddgddgddgddgffd	           d d d            n# 1 swxY w Y   t          g g g g g ffd
	          } t	          |                                 t          j        d
                     d S )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	D	D E EAq6QFQFQF34GDDDDE E E E E E E E E E E E E E E 2BB/0	BBBI""$$bhy&9&9:::::s   AAA)r   	new_shape))r   r"   r   r    )r   r      r   )r   )$      )r   )i8  )r   )r   r   r   r   r   r    r   c                 h   t           j                            d          }t          | d|t                    }|j        | k    sJ |                                }|                    |          }|                    |          }|j        |k    sJ t          |                                |           d S 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;%MMOOEmmI&&GmmI&&G=I%%%%""G,,,,,r   c                     t           j                            d          }t          | d|t                    }|j        t          j        |                                          k    sJ d S r   )r   r&   r   r   r   rm   r   r   )r   r   r   s      r   test_nd_nnzr     s[     )


)
)C
ucs#
>
>
>C7b&s{{}}55555555r   c                 >   t           j                            d          }t          | d|t                    }|                                j        }|                                }|j        | d d d         k    sJ t          ||                                           d S )Nr   r   r   r?   )
r   r&   r   r   r   r   rq   r{   r   r   )r   r   r   r   	trans_arrs        r   test_nd_transposer     s     )


)
)C
ucs#
>
>
>CkkmmoGI?eDDbDk)))))++--.....r   )r   	axis_perm))r   rt   )r!   rw   ))r   r   r   r   r    r   )r   r   r   r    r   r   c                 0   t           j                            d          }t          | d|t                    }|                    |          }t          |                                t          j        |                                |                     d S )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""$$bl3;;==y&Q&Q&QRRRRRr   c                  p   t          j        t          d          5  t          g d                              d           d d d            n# 1 swxY w Y   t          j        t          d          5  t          g dg dg                              d	           d d d            d S # 1 swxY w Y   d S )
Nrx   r:   r`   rw   ru   ry   rc   rd   rz   )r@   rA   rB   r   r{   rC   r   r   %test_transpose_with_inconsistent_axisr     sL   	z)M	N	N	N 4 4)))&&F&3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 
z)E	F	F	F A A999iii())333@@@A A A A A A A A A A A A A A A A A As#   &AAA4*B++B/2B/c            
         t          g dg dg dg dff          } | j        dk    sJ |                                 dk    sJ t          |                                 t          j        g dg dgg dg dgg dg d	gg                     |                                  | j        dk    sJ |                                 dk    sJ t          |                                 t          j        g dg dgg dg dgg dg d	gg                     g dg dg dg d
g df}t          g d|f          }|j        dk    sJ |                                dk    sJ |                                 |j        dk    sJ |                                dk    sJ t          |j        t          j        g                      t          |j	        t          j        g                      t          |j
        g g g g g f           d S )N)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   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     sX   |||lllLLL,,,%OPQQE9>>>>  A%%%%"(YYY			,B%.YY			$:YYY			<R,T #U #U V V V	9>>>>  A%%%%"(YYY			,B%.YY			$:YYY			<R,T #U #U V V V llLLL,,,lllSF|||V,--E9>>>>  A%%%%	9>>>>  A%%%%BHRLL)))BHRLL)))BB344444r   c                 h   t           j                            d          }t          | d|t                    }t          | d|t                    }|                                |                                }}||z   }||z   }t          |          t          |          u sJ t          ||           d S 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         )


)
)Cs3???Ds3???D<<>>4<<>>5E
%-C
,C99S		!!!!cr   c                 L   t           j                            d          }t          | d|t                    }t          | d|t                    }|                                |                                }}||z   }||z   }t          ||                                           d S r   r   r&   r   r   r   r   r   r   r   r  r  r  r  r   r   s           r   test_nd_add_sparser    s     )


)
)C#SAAAD#SAAAD<<>>4<<>>5EIJJ..0011111r   c                     t          j        dgt           j        ggdgdggg          } t          j        dgdggdgdggg          }| |z   }t          |           t          |          z   }t	          ||                                           d S Nr   r   r   r   r   )r   r%   infr   r   r   r   s       r   test_add_sparse_with_infr  %      HsRVHoqc{344EHsQCjA3*-..EI5!!Ie$4$44JJ..0011111r   )a_shapeb_shape))r   )r$   )r   r   )r   r    )r    r"   r   r   )r"   r    r   r   c                    t           j                            d          }t          | d|t                    }t          |d|t                    }t          j        t          d          5  ||z    d d d            d S # 1 swxY w Y   d S )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  .  s     )


)
)C'CSDDDE'CSDDDE	zU
W 
W 
W                      +A>>BBc                 h   t           j                            d          }t          | d|t                    }t          | d|t                    }|                                |                                }}||z
  }||z
  }t          |          t          |          u sJ t          ||           d S r   r   r  s           r   test_nd_sub_denser  ;  r  r   c                 L   t           j                            d          }t          | d|t                    }t          | d|t                    }|                                |                                }}||z
  }||z
  }t          ||                                           d S r   r	  r
  s           r   test_nd_sub_sparser  H  s     )


)
)Cs3???Ds3???D<<>>4<<>>5EIJJ..0011111r   c                     t          j        dgt           j        ggdgdggg          } t          j        dgdggdgdggg          }| |z
  }t          |           t          |          z
  }t	          ||                                           d S r  )r   r%   r)   r   r   r   r   s       r   test_nd_sub_sparse_with_nanr!  V  r  r   c                    t           j                            d          }t          | d|t                    }t          |d|t                    }t          j        t          d          5  ||z
   d d d            d S # 1 swxY w Y   d S )Nr   r   r   r9   r:   r  r  s        r   +test_nd_sub_sparse_with_inconsistent_shapesr#  _  s     )


)
)C'CSDDDE'CSDD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                 l   t           j                            d          }t          | d|t                    }t          |d|t                    }|                                |                                }}||z  }||z  }t          ||           |t          |          z  }t          ||           d S r   r   r&   r   r   r   r   r   r   )	r,  r-  r   r  r  r  r  r   rF   s	            r   test_nd_matmul_vectorr0  v  s    
)


)
)C	3CsCCCD	3CsCCCD<<>>4<<>>5E
%-C
,CS
e
CSr   ))r$  )r   r   r    r   r&  r'  )r   r#   r   r   )r1  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<   r2  r+  )
mat_shape1
mat_shape2c                    t           j                            d          }t          | d|t                    }t          |d|t                    }|                                |                                }}||z  }||z  }t          |                                |           ||z  }t          ||           |t          |          z  }t          ||           ||z  }t          ||           d S Nr   r   r   random_staterU   r/  )	r3  r4  r   r  r  r  r  r   rF   s	            r   test_nd_matmulr9    s    
)


)
)C
CcMMMD
CcMMMD<<>>4<<>>5E
%-C
+C$$$
,Cc
e
Cc $,Ccr   c                     t           j                            d          } t          dd| t                    }t          dd| t                    }t          j        t          d          5  ||z   d d d            n# 1 swxY w Y   t          j        t          d          5  ||                                z   d d d            n# 1 swxY w Y   t          dd| t                    }t          j        t          d	          5  ||z   d d d            n# 1 swxY w Y   t          j        t          d	          5  ||                                z   d d d            d S # 1 swxY w Y   d S )
Nr   )r   r    r   r   r   r   r7  )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<    sN   
)


)
)CSs#NNNDSs#NNND	z)T	U	U	U  t              	z)T	U	U	U                                  	3SLLLD	z)Q	R	R	R  t              	z)Q	R	R	R                                       sH   +A==BB#CCCDDD=E""E&)E&c                  t   t          g d          } t          g d          }t          j        |                                 |                                          }|                     |          }t	          ||           |                     |                                          }t	          ||           d S )Nr   r   )r   r   dotr   r   )abr   rF   s       r   test_dot_1d_1drA    s    '''A'''A
&aiikk
*
*C
%%((Cc
%%		

Ccr   c                      t          ddgddgddgg          } d}|                     |          }t          j        |                                 |          }t	          |                                |           d S )Nr   r   r   r   r    r   )r   r>  r   r   r   )r?  r@  rF   r   s       r   test_dot_sparse_scalarrC    sm    Aq6Aq6Aq6*++A	A
%%((C
&a
 
 C$$$$$r   c                      t          ddggddggg          } t          g d          }t          j        t          d          5  |                     |           d d d            d S # 1 swxY w Y   d S )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_shapesrE    s    Ax1a&*++Eiii  E	z)B	C	C	C  		%                 s   A''A+.A+c                  2   t          ddgddgg          } t          j        t          d          5  |                     d            d d d            n# 1 swxY w Y   t          j        t          d          5  |                     d            d d d            n# 1 swxY w Y   t          j        t          d          5  | d z   d d d            n# 1 swxY w Y   t          j        t          d          5  d | z   d d d            d S # 1 swxY w Y   d S )	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_implementedrH    s
   1v1v&''E	y(E	F	F	F  		$              	y(@	A	A	A                	y(B	C	C	C                	y(B	C	C	C  u                 sG   AAA9BB"BCCC9DDD)
)rb   rb   )r   r   r   r   ))r   r   r)  )r   r   r   r   r   )r%  r   r   r    r   )rK  )r   r   ))r   r    rL  )rI  r   r   r   r   )r   r#   r   )r   r    r   r   r   )r   r    r   r   rM  c                 z   t           j                            d          }t          | d|t                    }t          |d|t                    }t          j        |                                |                                          }|                    |                                          }t          ||           |                    t          |                                                    }t          ||           |                    |          }t          |                                |           d S r6  )	r   r&   r   r   r   r>  r   r   r   )r  r  r   r  r  r   rF   s          r   test_dot_ndrQ    s    
)


)
)C#CsKKKE#CsKKKE
&%--//
2
2C
))EMMOO
$
$Cc
))D))
*
*Cc
))E

C$$$$$r   rI  rJ  r   rK  r   r   r%  rL  rO  rM  rN  )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                    t           j                            d          }t          | d|t                    }t          |d|t                    }t          j        |                                |                                |          }|                    |                                |          }t          ||           |                    t          |                                          |          }t          ||           |                    ||          }t          |          t          u r$t          |                                |           d S t          ||           d S )Nr   r   r7  ru   )r   r&   r   r   r   rG  r   r   r   r   r   )r  r  rv   r   r  r  r   rF   s           r   test_tensordotrS    s)   
)


)
)C#CsKKKE#CsKKKE
,u}}d
C
C
CC //%--///
5
5Cc
//$u}}//d/
;
;Cc //%d/
+
+CCyyIS[[]]C(((((S#r   c                  J   t           j                            d          } t          dd| t                    }t          dd| t                    }dgdgf}t          j        t          d          5  |                    ||	           d d d            n# 1 swxY w Y   t          d
d| t                    }t          dd| t                    }g dddgf}t          j        t          d          5  |                    ||	           d d d            d S # 1 swxY w Y   d S )Nr   )r   r   r    r   r7  )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   rG  )r   r  r  rv   s       r    test_tensordot_with_invalid_argsrU    s   
)


)
)C#CsKKKE#CsKKKEC!:D	z)U	V	V	V * *D)))* * * * * * * * * * * * * * * c3OOOECcMMMEGGaUD	z *& 
' 
' 
' * *D)))* * * * * * * * * * * * * * * * * *s$   1BBB3DDD)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                 0   t           j                            d          }t          | d|t                    }|                    |          }t          j        |                                |          }t          |                                |           d S r6  )	r   r&   r   r   r   _broadcast_tobroadcast_tor   r   )rV  rW  r   r   rF   r   s         r   test_broadcast_tor[  +  sy     )


)
)C
|Ss#
N
N
NC


O
,
,C
/#++--
9
9C$$$$$r   ))r   r    r   r   r#   r  r  )r"   r    r   r   r   c                    t           j                            d          }t          | d|t                    }|                                }t	          t          j        |j        d d                             }|                    |f|j        dd          z             fdt          |          D             }t          | }t          |          }t          |                                |           d S )Nr   r   r7  r   c                 .    g | ]}|d d d d f         S r   rC   ).0ireshaped_arrays     r   
<listcomp>z#test_block_diag.<locals>.<listcomp>D  s,    CCCAq!!!QQQw'CCCr   )r   r&   r   r   r   r   prodr   rW   ranger   r   r   )	r   r   r  r  
num_slicesmatricesr   rF   r`  s	           @r   test_block_diagrf  9  s     )


)
)CsCHHHDLLNNE RWU["-..//J]]J=5;rss3C#CDDNCCCCz1B1BCCCH
h
C
d

C$$$$$r   c                    t           j                            d          }t          | d|t                    }t          t          |          |           }t          |                                |                                           d S r6  )	r   r&   r   r   r   r	   r   r   r   )r   r   r  rF   s       r   test_extract_block_diagrh  L  sl     )


)
)CsCHHHD
k$//
7
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_shapesr0  mat_mat_shapesr9  r<  rA  rC  rE  rH  
dot_shapesrQ  tensordot_shapes_and_axesrS  rU  r[  rf  rh  rC   r   r   <module>rv     sR	       & & & & & &  # # # # # # 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3< < <R R R@) ) )(+ + +80 0 05 5 58 8 8
	 	 	# # # " " "J  F F FA A A    3 3 3 00% % % % 10% LLL,,, ? ?@@%eCHo % % % A@% --%c % % % .-%  8
+ 
+ 
+  2 2 2      B" " "  #; #; #; < <0 0< <0  #; #; #; < <1 1< <1  #; #; #; < <% %< <%  #; #; #; < <% %< <%; ; ; / 2Q 2Q 2Q R R- -	R R-  #; #; #; < <6 6< <6  #; #; #; < </ /< </ / 2S 2S 2S T TS ST TSA A A5 5 54  #; #; #; < < < <  #; #; #; < <2 2< <22 2 2 / 2K 2K 2K L L L L  #; #; #; < < < <  #; #; #; < <	2 	2< <	22 2 2 / 2K 2K 2K L L L L
 
 
 3^DD
 
 ED
   5~FF  GF*     "  % % %  	 	 	  
 /<<% % =<%$ EQC!:sQCj!	9sQCj!	QFQF+,kIIIyyy12!g			999-.	  79RSS  TS,* * *& <M M MN N
% %N N
% ' %> %> %> ? ?% %? ?%" ' %> %> %> ? ?0 0? ?0 0 0r   