
    e!h:                     l    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y)	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                  j                  d
eeg      d        Zd Zd Zd Zej                  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                  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y<)=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
                         y )Nintcint32float32boolid)	r   sputilsupcastnpr   float64complexfloat
complex128selfs    g/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/sparse/tests/test_sputils.pytest_upcastzTestSparseUtils.test_upcast   sf    W^^F+RWW5W^^GY7DW^^FGU;R]]KW^^C-rzz:    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        t        t        d	      5  t        j                  d t         j                         d d d        y # 1 sw Y   IxY w# 1 sw Y   y xY w)
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   s    HHaS'W%%dE:EBW%%da0"'':B
 	" S!		" C
 	7 T2::6		7 	7	" 	"	7 	7s   C 1&C, C),C5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       y )N      @T      @      ?      @   16Fr!   r!      )r   r   isscalarliker   r*   r   s    r   test_isscalarlikez!TestSparseUtils.test_isscalarlike%   s    W))#.5W))"-t4W))#.5W))&148W))"((1+6=W))$/6W))"((A3-8%@W))A3%0%8W))$/7W))&159r   c                 z   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        t        t        j                  d      d       t        t        j                  d	      d       t        t        j                  d
      d       t        t        j                  d      d       y # 1 sw Y   xY w)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W&&rxx{3T:W&&rxx}5u=H
 	# c"		# 	W&&s+U3W&&v.6W&&t,e4W&&v.6	# 	#s   D11D:c                    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       y )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   sD   W__V,d3W__V,d3W__X.6W__Y/7W__qc1X.6W__WU;DAW__WU;DAW__WT:5AW__WT:5AW__X?GW__qc1X?GW__ZvN	W__TF;TBW__Wv>EW__Y@%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       y )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W''	2D9W'',d3W''	2D9W''(;<dCW''1#sQC(ABEJW''*E2r   c                    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       y )N) Tr!   r:   r6   F)r   r   ismatrixr   aranger   s    r   test_ismatrixzTestSparseUtils.test_ismatrix_   s    W%%e,d3W%%sQCj148W%%biil4&894@W%%q!f-u5W%%biil3U;W%%ug.6W%%a(%0r   c                     t        t        j                  t        j                  dg            d       t        t        j                  t        dg            d       y )Nr!   T)r   r   isdenser   r*   r
   r   s    r   test_isdensezTestSparseUtils.test_isdensei   s8    W__RXXqc]3T:W__VQC[148r   c                     t        t        t        j                  d       t        t        t        j                  d       t        t        t        j                  d       dD ]  }t        j                  |        y )Nr   r!   rB   r6   )rG   rD   r   r!   N)r,   	TypeErrorr   validateaxisr-   )r   axiss     r   test_validateaxisz!TestSparseUtils.test_validateaxism   sW    i!5!5v>i!5!5s;j'"6"6: ) 	'D  &	'r   	containerc                 	   t        j                  t        j                  t         j                        j                        } |d|f      }|j                         }|j                  j                  t         j                        |_        |j                  j                  t         j                        |_        t        d|dz   f      }|j                         }|j                  j                  t         j                        |_        |j                  j                  t         j                        |_        |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 rJ  t        t               5  t        j                  |t         j                         d d d        t        j                  |t         j                        \  }	}
|	|j                  u sJ |
|j                  u sJ y # 1 sw Y   QxY w)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   sl   
 xx*../ D	"hhjkk((2ZZ&&rxx0
 D1H&hhjkk((2ZZ&&rxx0
hhjhhqz:XXq!fBHH5
88SE?!!3::#3#342888LLLL!!3::#3#342888LLLL!!3::#3#342888LLLL!!3::#3#342888LLLL!!3::#3#342888LLLLsC% 	&A%>>q"((KOGVMM6<<0RXXrxx4HHHH%>>q"((KOGVMM6<<0RXXrxx4HHHH%>>q!))//ROGVaii'''QXX%%%	& :& 	<,,S"((;	<!::3I#++%%%###		< 	<s   0%S%%S.c                    t        j                  t        j                  t         j                        j                        }t        d|f      }|j                         }t        d |j                  D              |_        t        d|dz   f      }|j                         }t        d |j                  D              |_        |j                         }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 rJ  t        t              5  t        j                  |t         j                         d d d        t        j                  |t         j                        }|d   |j                  d   u sJ y # 1 sw Y   DxY w)Nr!   c              3   Z   K   | ]#  }|j                  t        j                         % y wN)re   r   r`   .0cos     r   	<genexpr>z=TestSparseUtils.test_safely_cast_index_coo.<locals>.<genexpr>        D2299RXX.D   )+c              3   Z   K   | ]#  }|j                  t        j                         % y wrr   )re   r   r   rs   s     r   rv   z=TestSparseUtils.test_safely_cast_index_coo.<locals>.<genexpr>   rw   rx   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/   r{   s	            r   test_safely_cast_index_cooz*TestSparseUtils.test_safely_cast_index_coo   s    xx*../ D	"hhjDDD
 D1H&hhjDDD
hhjhhqz*BHHaSM:
88SE?zz!}""bhh...zz!}""bhh...zz!}""bhh...zz!}""bhh...zz!}""bhh...sC% 	,A55aBF!9??bhh...55aBF!9??bhh...55a!9J9JKF!9+++	, :& 	<,,S"((;	<11#rxx@ayCJJqM)))	< 	<s   $%MMc                 p   t        j                  t        j                  t         j                        j                        }t        d|f      }|j                         }|j                  j                  t         j                        |_        t        d|dz   f      }|j                         }|j                  j                  t         j                        |_        |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 rJ  t        t              5  t        j                  |t         j                         d d d        t        j                  |t         j                        }||j                  u sJ y # 1 sw Y   >xY w)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   sH    xx*../ D	"hhjkk((2 D1H&hhjkk((2hhjhhqz*88SE?{{  BHH,,,{{  BHH,,,{{  BHH,,,{{  BHH,,,{{  BHH,,,sC% 	(A66q"((CG==BHH,,,66q"((CG==BHH,,,66q!))//JGaii'''	( :& 	<,,S"((;	<223A#++%%%	< 	<s   
%L,,L5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	             y )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   xx*../( WWRx(WWRx(HHW,,b"XdKLHHW	
 2HHW,,b"XdKLHHW	
 2HHW,,b"XdKLHHW	
 WWRx(WWRx(HHW,,b"X67HHW	
 WWRx(WWRx(HHW,,R  HHW		
 2HHW,,b"XgFGHHW	
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                  | |       y rr   )r   r   broadcast_shapes)r   input_shapestarget_shapes      r   test_broadcast_shapes_successesz/TestSparseUtils.test_broadcast_shapes_successes7  s    L 	W--|<l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        t        d      5  t        j                  |  d d d        y # 1 sw Y   y xY w)Nzcannot be broadcastr'   )r,   r-   r   r   )r   r   s     r   test_broadcast_shapes_failuresz.TestSparseUtils.test_broadcast_shapes_failures`  s2     :-BC 	4$$l3	4 	4 	4s   .7c                 J    t        j                  dgd      }t        |d       y )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	Y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       y )NrL   {   F)rc   r   r   r   )r   r*   
isinstancer   r
   r   r   r&   bcs       r   test_matrixzTestSparseUtils.test_matrixs  s    KHHQK'..+RYY777'..+RYY777NN1!Q$QNN15)!Q$Q)*r   c                 R   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       y )NrL   r   r   )r   r*   r   r   asmatrixr
   r   r   s       r   test_asmatrixzTestSparseUtils.test_asmatrix  s~    KHHQK'**1-ryy999'**1-ryy999Q!Q$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I(319' [[[9i*@A.$ B.$`(*T(&T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K$JL [[^	t		
F			I)	tfrk!
. 
4
4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 (@+ @+r   