
    _Mh:                     t    d Z 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mZmZmZ ddlmZ  G d d          ZdS )	z'unit tests for sparse utility functions    N)assert_equal)raises)_sputils	csr_array	bsr_array	dia_array	coo_array)matrixc                   $   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zej                            d
eeg          d             Zd Zd Zd Zej                            dg ddgddgddgg ddgg dgdgdgdgdgddgdgddgdgdgdgddgdgg ddgdgdgd d!gd"gd#d$gd$gd%d$gd$gd#d%gd$gdd$gd$gdd#gd#gdd%gd%gdd&gd&gd&d$gd$gd&d%gd$gd'd$gd$gdd$gd$gdd&gd#gd'd%gd%gd'd#gd#gdd#gd#gdd%gd%gd'd(gd(gd)d*gd*gdgd+z  dgdgd,z  dgdgd+z  dg          d-             Zej                            d.d(d/gd0dgd)d0gg d1d2d3gd4d2gd5d6gg d7dgd+z  d(gd+z  z   g	          d8             Zd9 Zd: Zd; Zd<S )=TestSparseUtilsc                    t          t          j        d          t          j                   t          t          j        dd          t          j                   t          t          j        dt          t                    t          j                   t          t          j        dd          t          j                   d S )Nintcint32float32boolid)	r   sputilsupcastnpr   float64complexfloat
complex128selfs    _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/sparse/tests/test_sputils.pytest_upcastzTestSparseUtils.test_upcast   s    W^F++RW555W^GY77DDDW^FGU;;R]KKKW^C--rz:::::    c                    t          j        dgd          }t          t          j        d t
                    t
                     t          t          j        d |          t           j                   t          t          d          5  t          j        d           d d d            n# 1 swxY w Y   t          t          d	          5  t          j        d t           j	                   d d d            d S # 1 swxY w Y   d S )
N   int8dtype)default)az.scipy.sparse does not support dtype object. .*matchOz/scipy.sparse does not support dtype float16. .*)
r   arrayr   r   getdtyper   r"   assert_raises
ValueErrorfloat16)r   As     r   test_getdtypezTestSparseUtils.test_getdtype   sx   HaS'''W%dE:::EBBBW%da000"':::B
 
 
 	" 	" S!!!		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" C
 
 
 	7 	7 T2:6666		7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s$   
B++B/2B/!C::C>C>c                    t          t          j        d          d           t          t          j        d          d           t          t          j        d          d           t          t          j        d          d           t          t          j        t          j        d                    d           t          t          j        d          d           t          t          j        t          j        dg                    d           t          t          j        dgg          d           t          t          j        d	          d           t          t          j        d
          d           d S )N      @T      @      ?      @   16Fr!   r!      )r   r   isscalarliker   r*   r   s    r   test_isscalarlikez!TestSparseUtils.test_isscalarlike%   s,   W)#..555W)"--t444W)#..555W)&114888W)"(1++66===W)$//666W)"(A3--88%@@@W)A3%00%888W)$//777W)&11599999r   c                    t          t          j        d          d           t          t          j        t          j        d                    d           t          t          j        t          j        dg                    d           t          t          d          5  t          j        d           d d d            n# 1 swxY w Y   t          t          j        d          d           t          t          j        d	          d           t          t          j        d
          d           t          t          j        d          d           d S )Nr3   Tr6   Fz4Inexact indices into sparse matrices are not allowedr'   r2   r4   r5   r8   r9   )r   r   	isintliker   r*   r,   r-   r   s    r   test_isintlikezTestSparseUtils.test_isintlike2   s\   W&r**D111W&rx{{33T:::W&rx}}55u===H
 
 
 	# 	# c"""		# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	W&s++U333W&v..666W&t,,e444W&v..66666s   "CC
Cc                 8   t          t          j        d          d           t          t          j        d          d           t          t          j        d          d           t          t          j        d          d           t          t          j        dgdf          d           t          t          j        dd	          d           t          t          j        d
d	          d           t          t          j        dd	          d           t          t          j        d
d	          d           t          t          j        dd          d           t          t          j        dgdfd          d           t          t          j        ddd          d           t          t          j        dd          d           t          t          j        dd          d           t          t          j        dd          d           d S )Nr9   T)   r:   )      ?r:   Fr:   r:   r:   r:   )r:   )nonneg)r:   rD   )allow_nd)r:   r:   )rE   rF   r:   )r:   r:   )r   r   isshaper   s    r   test_isshapezTestSparseUtils.test_isshapeA   s   W_V,,d333W_V,,d333W_X..666W_Y//777W_qc1X..666W_WU;;;DAAAW_WU;;;DAAAW_WT:::5AAAW_WT:::5AAAW_X???GGGW_qc1X???GGGW_ZvNNN	 	 	W_TF;;;TBBBW_Wv>>>EEEW_Y@@@%HHHHHr   c           	      @   t          t          j        d          d           t          t          j        d          d           t          t          j        dg          d           t          t          j        g d          d           t          t          j        t          j        g d                    d           t          t          j        t          j        dgdgdgg                    d           t          t          j        d          d           d S )Nr8   Tr!   r:   r6   r!   r:   r6   F)r   r   
issequencer   r*   r   s    r   test_issequencezTestSparseUtils.test_issequenceU   s    W'--t444W'	22D999W',,d333W'			22D999W'(;(;<<dCCCW'1#sQC(A(ABBEJJJW'**E22222r   c                 H   t          t          j        d          d           t          t          j        dgdgg          d           t          t          j        t          j        d          d                    d           t          t          j        ddg          d           t          t          j        t          j        d                    d           t          t          j        dggg          d           t          t          j        d          d           d S )N) Tr!   r:   r6   F)r   r   ismatrixr   aranger   s    r   test_ismatrixzTestSparseUtils.test_ismatrix_   s    W%e,,d333W%sQCj114888W%bill4&8994@@@W%q!f--u555W%bill33U;;;W%ug..666W%a((%00000r   c                     t          t          j        t          j        dg                    d           t          t          j        t          dg                    d           d S )Nr!   T)r   r   isdenser   r*   r
   r   s    r   test_isdensezTestSparseUtils.test_isdensei   sN    W_RXqc]]33T:::W_VQC[[11488888r   c                     t          t          t          j        d           t          t          t          j        d           t          t          t          j        d           dD ]}t          j        |           d S )Nr   r!   rB   r6   )rG   rD   r   r!   N)r,   	TypeErrorr   validateaxisr-   )r   axiss     r   test_validateaxisz!TestSparseUtils.test_validateaxism   sp    i!5v>>>i!5s;;;j'"6::: ) 	' 	'D &&&&	' 	'r   	containerc                    t          j        t          j        t           j                  j                  } |d|f          }|                                }|j                            t           j                  |_        |j                            t           j                  |_        t          d|dz   f          }|                                }|j                            t           j                  |_        |j                            t           j                  |_        |                                }t          j
        |dz   gt           j                  |_        t          j
        ddgt           j                  |_        t          j
        dg          |_        |j        j        |j        j        ft           j        t           j        fk    sJ |j        j        |j        j        ft           j        t           j        fk    sJ |j        j        |j        j        ft           j        t           j        fk    sJ |j        j        |j        j        ft           j        t           j        fk    sJ |j        j        |j        j        ft           j        t           j        fk    sJ ||||fD ]}t          j        |t           j                  \  }	}
|	j        |
j        ft           j        t           j        fk    sJ t          j        |t           j                  \  }	}
|	j        |
j        ft           j        t           j        fk    sJ t          j        ||j        j                  \  }	}
|	|j        u sJ |
|j        u sJ t          t                     5  t          j        |t           j                   d d d            n# 1 swxY w Y   t          j        |t           j                  \  }	}
|	|j        u sJ |
|j        u sJ d S )Nr!   r#   r   皙@)r   int64iinfor   maxcopyindicesastypeindptrr   r*   datar$   r   safely_cast_index_arraysr,   r-   )r   r]   imaxA32B32A64B64C64r/   rd   rf   s              r   !test_safely_cast_index_compressedz1TestSparseUtils.test_safely_cast_index_compressedv   s~   
 x**.// iD	""hhjjk((22Z&&rx00
 D1H&&hhjjk((22Z&&rx00
hhjjhqz:::Xq!fBH555
8SE??!3:#34288LLLLL!3:#34288LLLLL!3:#34288LLLLL!3:#34288LLLLL!3:#34288LLLLLsC% 	& 	&A%>q"(KKOGVM6<0RXrx4HHHHH%>q"(KKOGVM6<0RXrx4HHHHH%>q!)/RROGVai''''QX%%%%%:&& 	< 	<,S"(;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<!:3II#+%%%%######s    N>>OOc                 &   t          j        t          j        t           j                  j                  }t          d|f          }|                                }t          d |j        D                       |_        t          d|dz   f          }|                                }t          d |j        D                       |_        |                                }t          j	        |dz   g          t          j	        dg          f|_        t          j	        dg          |_
        |j        d         j        t           j        k    sJ |j        d         j        t           j        k    sJ |j        d         j        t           j        k    sJ |j        d         j        t           j        k    sJ |j        d         j        t           j        k    sJ ||||fD ]}t          j        |t           j                  }|d         j        t           j        k    sJ t          j        |t           j                  }|d         j        t           j        k    sJ t          j        ||j        d         j                  }|d         |j        d         u sJ t          t                    5  t          j        |t           j                   d d d            n# 1 swxY w Y   t          j        |t           j                  }|d         |j        d         u sJ d S )Nr!   c              3   T   K   | ]#}|                     t          j                  V  $d S N)re   r   r`   .0cos     r   	<genexpr>z=TestSparseUtils.test_safely_cast_index_coo.<locals>.<genexpr>   0      DD2299RX..DDDDDDr   c              3   T   K   | ]#}|                     t          j                  V  $d S rr   )re   r   r   rs   s     r   rv   z=TestSparseUtils.test_safely_cast_index_coo.<locals>.<genexpr>   rw   r   r   r_   )r   r`   ra   r   rb   r	   rc   tuplecoordsr*   rg   r$   r   rh   r,   r-   )	r   ri   rj   rk   rl   rm   rn   r/   rz   s	            r   test_safely_cast_index_cooz*TestSparseUtils.test_safely_cast_index_coo   s    x**.// D	""hhjjDDDDDDD
 D1H&&hhjjDDDDDDD
hhjjhqz**BHaSMM:
8SE??z!}"bh....z!}"bh....z!}"bh....z!}"bh....z!}"bh....sC% 	, 	,A5aBBF!9?bh....5aBBF!9?bh....5a!9JKKF!9+++++:&& 	< 	<,S"(;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<1#rx@@ayCJqM))))))s   $ KKKc                    t          j        t          j        t           j                  j                  }t          d|f          }|                                }|j                            t           j                  |_        t          d|dz   f          }|                                }|j                            t           j                  |_        |                                }t          j	        |dz   g          |_        t          j	        dg          |_
        |j        j        t           j        k    sJ |j        j        t           j        k    sJ |j        j        t           j        k    sJ |j        j        t           j        k    sJ |j        j        t           j        k    sJ ||||fD ]}t          j        |t           j                  }|j        t           j        k    sJ t          j        |t           j                  }|j        t           j        k    sJ t          j        ||j        j                  }||j        u sJ t          t                    5  t          j        |t           j                   d d d            n# 1 swxY w Y   t          j        |t           j                  }||j        u sJ d S )Nr!   r:   r_   )r   r`   ra   r   rb   r   rc   offsetsre   r*   rg   r$   r   rh   r,   r-   )	r   ri   rj   rk   rl   rm   rn   r/   r}   s	            r   test_safely_cast_index_diaz*TestSparseUtils.test_safely_cast_index_dia   s    x**.// D	""hhjjk((22 D1H&&hhjjk((22hhjjhqz**8SE??{ BH,,,,{ BH,,,,{ BH,,,,{ BH,,,,{ BH,,,,sC% 	( 	(A6q"(CCG=BH,,,,6q"(CCG=BH,,,,6q!)/JJGai''''':&& 	< 	<,S"(;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<23AA#+%%%%%%s    JJJc           	         t          j        t          j        t           j                  j                  }|dz   }t          j        dd          }t          j        dd          }t          t          j        t          j	        ||fd                    t          j        d                     ||d<   t          t          j        t          j	        ||fd                    t          j        d                     ||d<   t          t          j        t          j	        ||fd                    t          j        d	                     t          j        d
d          }t          j        d
d          }t          t          j        t          j	        ||f                    t          j        d	                     t          j        dd          }t          j        dd          }t          t          j        t          j	        ||f|d                    t          j        d	                     ||d<   t          t          j        t          j	        ||f|                    t          j        d	                     d S )Nr!   Z   uint32r#   T)check_contentsr   rD   r`   Y      )maxvalr   )r   )
r   r`   ra   r   rb   onesr   r$   r   get_index_dtype)r   ri   too_biga1a2s        r   test_get_index_dtypez$TestSparseUtils.test_get_index_dtype   s\   x**.//( WRx(((WRx(((HW,b"XdKKKLLHW	
 	
 	
 2HW,b"XdKKKLLHW	
 	
 	
 2HW,b"XdKKKLLHW	
 	
 	
 WRx(((WRx(((HW,b"X6677HW	
 	
 	
 WRx(((WRx(((HW,R     HW		
 	
 	
 2HW,b"XgFFFGGHW	
 	
 	
 	
 	
r   zinput_shapes,target_shape)   rA   r!      r!   r!   r!           r   r!   )r   rA   r!   r   r   r   )r   r   )r   rA   r!   r   r!   r   )r   r   )r   r   rC   rH   rP      r9   )r!   r!   )r6   r   ))r   r   rA   r   r!   r   )rA   r!   r   )rA   r   r   r   )r!   r6   r6   r!   )r6   r6   )r!   r   )r   r   rX   )r   r8   r6   r:   r6   r:       d   c                 >    t          t          j        | |           d S rr   )r   r   broadcast_shapes)r   input_shapestarget_shapes      r   test_broadcast_shapes_successesz/TestSparseUtils.test_broadcast_shapes_successes7  s#    L 	W-|<lKKKKKr   r   r   )r:   r6   )r   r   r   )r:   rA   )r6   rA   )r:   r   )r!   r6   r   )r:   r6   r6   )r9   r   r   )
   rA   c                     t          t          d          5  t          j        |  d d d            d S # 1 swxY w Y   d S )Nzcannot be broadcastr'   )r,   r-   r   r   )r   r   s     r   test_broadcast_shapes_failuresz.TestSparseUtils.test_broadcast_shapes_failures`  s     :-BCCC 	4 	4$l33	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   377c                 R    t          j        dgd          }t          |d           d S )N)r   rD   )i  i )r   i23)r   check_shaper   )r   	new_shapes     r   test_check_shape_overflowz)TestSparseUtils.test_check_shape_overflowo  s,    '
ODD	Y00000r   c                    g dg}t          j        |          }t          t          j        |          t           j                  sJ t          t          j        |          t           j                  sJ t          j        |          }d|d d d d f<   t          ||           t          j        |d          }d|d d d d f<   t          |g dg           d S )NrL   {   F)rc   r   r   r   )r   r*   
isinstancer   r
   r   r   r&   bcs       r   test_matrixzTestSparseUtils.test_matrixs  s    YYKHQKK'.++RY77777'.++RY77777N1!!!QQQ$QN15)))!!!QQQ$Q)*****r   c                 T   g dg}t          j        |          }t          t          j        |          t           j                  sJ t          t          j        |          t           j                  sJ t          j        |          }d|d d d d f<   t          |g dg           d S )NrL   r   r   )r   r*   r   r   asmatrixr
   r   r   s       r   test_asmatrixzTestSparseUtils.test_asmatrix  s    YYKHQKK'*1--ry99999'*1--ry99999Q!!!QQQ$Q)*****r   N)__name__
__module____qualname__r   r0   r<   r?   rJ   rN   rS   rV   r\   pytestmarkparametrizer   r   ro   r{   r~   r   r   r   r   r   r   rP   r   r   r   r      s       ; ; ;7 7 7$: : :7 7 7I I I(3 3 31 1 19 9 9' ' ' [[9i*@AA.$ .$ BA.$`(* (* (*T(& (& (&T7
 7
 7
x [8 $;	57QR$;	)+AB$; 
">2$; 
D	$;
 
R$; r
$; $; $ $;  $; 6$; &	6"$; 
.	-	-y9$; i $; &	6"$; &	6"$;  &	6"!$;" &	6"#$;$ &	6"%$;& &	6"'$;( &	6")$;* dT+$;,  -$;.  /$;0  1$;2 fv3$;4 $ 5$;6  7$;8  9$;: fv;$;< fv=$;> t?$;@ VfA$;B BC$;D C E$;F "dG$; $ $JL LK$ $JL [^	t		
F			I)))	tfrk!
. 
 
4 4
 
41 1 1+ + +	+ 	+ 	+ 	+ 	+r   r   )__doc__numpyr   numpy.testingr   r   r   r,   scipy.sparser   r   r   r   r   r	   scipy.sparse._sputilsr
   r   rP   r   r   <module>r      s    - -     & & & & & &  * * * * * * X X X X X X X X X X X X X X ( ( ( ( ( (@+ @+ @+ @+ @+ @+ @+ @+ @+ @+r   