
    S_f?                        d Z ddlZddlZddlZddlmZmZm	Z	m
Z
 ddlmZmZ ddlmZ ej                   j#                         Zej'                  e       ej(                  j*                  ej(                  j,                  gZej0                  ej2                  ej4                  gZej8                  d        Zej8                  d        Zej>                  jA                  deee	e
g      d	        Z!ej>                  jA                  de       G d
 d             Z"ej>                  jA                  dej(                  j,                  g       G d d             Z#y)z*Test of 1D aspects of sparse array classes    N)	bsr_array	csc_array	dia_array	lil_array)supported_dtypesmatrix)ComplexWarningc                  2    t        j                  g dd      S )N)   r      r   d)nparray     @lib/python3.12/site-packages/scipy/sparse/tests/test_common1d.pydat1dr      s    88L#&&r   c                     t         D ci c]  }|| j                  |       }}t        D ci c]/  }||j                         D cg c]  \  }}|| ||      f c}}1 c}}}S c c}w c c}}w c c}}}w N)math_dtypesastype
spcreatorsitems)r   dtype
dat_dtypesspdats        r   datsp_math_dtypesr      s{    :EF%e,,FJF   	Z5E5E5GHzuceS"S'"HH  GHs   A'A2A,A2,A2	spcreatorc                 x    t        j                  t        d      5   | g d       d d d        y # 1 sw Y   y xY w)Nzarrays don't support 1D inputmatchr   r      r   pytestraises
ValueError)r   s    r   test_no_1d_support_in_initr)   '   s.    	z)H	I  ,     s   09c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zed        Zed        Zed        Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"y )!TestCommon1Dz5test common functionality shared by 1D sparse formatsc                 *   t        j                   |d      j                         t        j                  d            sJ t        j                   |d      j                  d      sJ t        j                   |d      j                         d      sJ y )Nr   r   r   )r   array_equaltoarrayzerosnnzcount_nonzeroselfr   s     r   test_create_emptyzTestCommon1D.test_create_empty2   sj    ~~io557!EEE~~io111555~~io;;=qAAAr   c                 t    t        j                  t        d      5   |d       d d d        y # 1 sw Y   y xY w)Nzelements cannot be negativer!   )r%   r3   s     r   test_invalid_shapesz TestCommon1D.test_invalid_shapes7   s.    ]]:-JK 	e	 	 	s   	.7c                 &    t         ||             y r   )reprr4   r   r   s      r   	test_reprzTestCommon1D.test_repr;   s    Yur   c                 &    t         ||             y r   )strr;   s      r   test_strzTestCommon1D.test_str>   s    Ier   c                     t        j                  g dd      }t        j                  |  ||       j                               sJ y )N)r      r   r   r   r   r   r   r   r   )r   r   r.   r/   r4   r   As      r   test_negzTestCommon1D.test_negA   s8    HH=sC~~qbIaL="9"9";<<<r   c                 :     |g d      }|j                   dk(  sJ y )Nr#   r   )ndimrE   s      r   test_1d_supported_initz#TestCommon1D.test_1d_supported_initE   s    l#vv{{r   c                     |g d      }|j                  dd      }g dg}t        j                  |j                         |      sJ  ||      }|j                  d      }t        j                  |j                         |d         sJ |j                  d      }|j                  |j                  k(  sJ |j
                  j                  d      }t        j                  |j                         |d         sJ y )Nr   r      r   r   r   r   r7   r   r   r      r      r   rO   )reshaper   r.   r/   shapeT)r4   r   xydesiredy2s         r   $test_reshape_1d_tofrom_row_or_columnz1TestCommon1D.test_reshape_1d_tofrom_row_or_columnI   s    ;<IIa89~~aiik7333 gIIbM~~aiik71:666YYuww"((""" CCKKO~~aiik71:666r   c                 Z    |g d      }|j                  d      }g dg dg dg dg}t        j                  |j                         |      sJ |j                  d      }||u sJ |j                  d      }t        j                  |j                         |j                               sJ y )	NrL   )   r   )r   r   rM   )r   r   r   )r   r7   r   )r   r   rN   rP   rO   )rQ   r   r.   r/   )r4   r   rT   rU   rV   s        r   test_reshapezTestCommon1D.test_reshape[   s    ;<IIfiY?~~aiik7333IIeAvvIIbM~~aiik199;777r   c                    t         j                  j                  d       t        j                  g d      }t         j                  j	                  d      }t        j                  g       }t        j
                  d      }||||g}|D ],  } ||      }t        j                  d      5  t        j                  |j                               sJ t        j                  |j                         |j                               sJ t        j                  |j                  d       |j                  d             sJ t        j                  |j                  d      |j                  d            sJ t        j                  |j                  d	      |j                  d	            sJ 	 d d d        / j                  dt        j
                  d
             y # 1 sw Y   axY w)Ni  )	r   r   r$   r   rD   rN   rM   	   rN   )(   ignore)overaxisr   rA   r   rc   out)
r   randomseedr   randr0   errstateisscalarsumallclose)	r4   r   dat_1dat_2dat_3dat_4arraysr   datsps	            r   test_sumzTestCommon1D.test_sumg   so   
		t67		q!u- 	ICcNE(+ I{{599;///{{3779eiik:::{{3777#5uyydy7KLLL{{3777?EII1I4EFFF{{3777#3UYYBY5GHHHI I	I 			qbhhrl	+I Is   *DGG)	c                 ~   t        j                  d      }t        j                  g d      } ||      }t        j                  t
        d      5  |j                  d       d d d        t        j                  t        d      5  |j                  d       d d d        t        j                  t        d	      5  |j                  d
       d d d        t        j                  t
        d      5  |j                  d|       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   y xY w)Nr-   r   r   r$   zaxis must be None, -1 or 0r!   r   rb   Tuples are not acceptedr   r   axis must be an integer      ?dimensions do not matchr   rd   )r   r0   r   r&   r'   r(   rk   	TypeErrorr4   r   re   r   rr   s        r   test_sum_invalid_paramsz$TestCommon1D.test_sum_invalid_params{   s    hhtnhhy!#]]:-IJ 	II1I	]]9,EF 	#II6I"	#]]9,EF 	 II3I	 ]]:-FG 	'II1#I&	' 	'	 		# 	#	  	 	' 	's0   DD<D'2D3DD$'D03D<c                     t        j                  g d      } ||      }t        j                  |      }t        j                  |      }t        j                  ||      sJ y Nru   )r   r   rk   rl   )r4   r   r   rr   dat_sum	datsp_sums         r   test_numpy_sumzTestCommon1D.test_numpy_sum   sG    hhy!#&&+FF5M	{{7I...r   c                 P   t        j                  g d      } ||      }t        j                  |j                         |j                               sJ t        j                  |j                  d             sJ t        j                  |j                  d       |j                  d             sJ t        j                  |j                  d      |j                  d            sJ t        j                  |j                  d      |j                  d            sJ t        j                  t        d      5  |j                  d       d d d        t        j                  t        d      5  |j                  d       d d d        y # 1 sw Y   @xY w# 1 sw Y   y xY w)	Nru   rb   r   rA   rc   r!   r   )r   r   rl   meanrj   r&   r'   r(   )r4   r   r   rr   s       r   	test_meanzTestCommon1D.test_mean   s;   hhy!#{{388:uzz|444{{5::4:0111{{3888.


0EFFF{{3888+UZZQZ-?@@@{{3888,ejjbj.ABBB]]:V4 	JJAJ	]]:V4 	 JJBJ	  	 	 		  	 s   >F4FFF%c                 B   t        j                  t        j                  d            }t        j                  g dg dg dg      }|j                  dk(  r-t        j                  t        d      5   ||       d d d        y  ||      }t        j                  t        d      5  |j                  d	
       d d d        t        j                  t        d      5  |j                  d
       d d d        t        j                  t        d      5  |j                  d
       d d d        t        j                  t        d      5  |j                  d|       d d d        y # 1 sw Y   y xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   exY w# 1 sw Y   y xY w)N)r   r   ru   )r   rD   rN   )r]   rM   r^   unizqr!   zaxis out of ranger   rb   rv   rw   rx   ry   rz   r   rd   )
r   asarrayr0   r   _formatr&   r'   r(   r   r{   r|   s        r   test_mean_invalid_paramsz%TestCommon1D.test_mean_invalid_params   s?   jj&)*hh	:z:;%z6 ##]]:-@A 	JJAJ	]]9,EF 	$JJFJ#	$]]9,EF 	!JJCJ 	!]]:-FG 	(JJA3J'	( 	(	 		$ 	$	! 	!	( 	(s<   1	E%&E1E=F	F%E.1E:=F	FFc                 (   t        j                  g d      } ||      }t        D ]j  }|j                  |      }|j                  |      }t        j                  ||      sJ t        j
                  |j                  |j                        rjJ  y Nru   r   )r   r   r   rk   rl   r.   r   )r4   r   r   rr   r   r   r   s          r   test_sum_dtypezTestCommon1D.test_sum_dtype   sz    hhy!#% 	BEggEg*G			.I;;w	222>>'--AAA	Br   c                 (   t        j                  g d      } ||      }t        D ]j  }|j                  |      }|j                  |      }t        j                  ||      sJ t        j
                  |j                  |j                        rjJ  y r   )r   r   r   r   rl   r.   r   )r4   r   r   rr   r   dat_mean
datsp_means          r   test_mean_dtypezTestCommon1D.test_mean_dtype   s|    hhy!#% 	DExxex,H%0J;;x444>>(..*2B2BCCC	Dr   c                    t        j                  g d      } ||      }t        j                  dg      }t        j                  dg      }|j                  |d       |j                  |       t        j                  ||      sJ |j                  d|d       |j                  d|       t        j                  ||      sJ y )Nru   r   T)re   keepdimsre   )rc   re   r   rd   )r   r   r   rl   )r4   r   r   rr   dat_out	datsp_outs         r   test_mean_outzTestCommon1D.test_mean_out   s    hhy!#((A3-HHaSM	Wt,

y
!{{7I...aWt4

y
){{7I...r   c                    t        j                  g d      } ||      }t        j                  |      }t        j                  |      }t        j                  ||      sJ t        j                  |j
                  |j
                        sJ y r   )r   r   r   rl   r.   r   )r4   r   r   rr   r   r   s         r   test_numpy_meanzTestCommon1D.test_numpy_mean   se    hhy!#773<WWU^
{{8Z000~~hnnj.>.>???r   c                    t        j                  g d      }t        j                   ||      j                         |      sJ t        j                  g d      }t        j                   ||      j                         |      sJ t        j                   ||d      j                         |j	                  d            sJ y N)r$   r   rZ   y      ?      @r   rA   int16r   )r   r   r.   r/   r   rE   s      r   test_from_arrayzTestCommon1D.test_from_array   s    HHY~~il224a888HH&'~~il224a888~~i9AACQXXgEVWWWr   c                    g d}t        j                   ||      j                         |      sJ g d}t        j                   ||      j                         t        j                  |            sJ t        j                   ||d      j                         t        j                  |      j	                  d            sJ y r   )r   r.   r/   r   r   rE   s      r   test_from_listzTestCommon1D.test_from_list   s    ~~il224a888~~il224bhhqkBBB~~aw'//1288A;3E3Eg3N
 	
 
r   c                 P   t        j                  g d      }t        j                  j	                  |      }t        j
                   ||      j                         |      sJ  ||      }t        j
                   ||      j                         |      sJ t        j                  g d      }t        j                  j	                  |      }t        j
                   ||      j                         |      sJ t        j
                   ||d      j                         |j                  d            sJ  ||      }t        j
                   ||      j                         |      sJ t        j
                   ||d      j                         |j                  d            sJ y )N)r   r   r   r   r   r   )r   r   r   sparse	coo_arrayr.   r/   r   r4   r   DSs       r   test_from_sparsezTestCommon1D.test_from_sparse   s7   HHYII"~~il224a888aL~~il224a888HH&'II"~~il224a888~~i9AACQXXgEVWWWaL~~il224a888~~i9AACQXXgEVWWWr   c                 h    ||      }|j                         }t        j                  ||      sJ |j                  j                  |j                  j
                  k(  sJ |j                  d      }t        j                  ||      sJ |j                  j                  sJ |j                  j
                  sJ |j                  d      }t        j                  ||      sJ |j                  j                  sJ |j                  j
                  sJ t        j                  |j                  |j                        }|j                  |       t        j                  ||      sJ d|d<   |j                  |       t        j                  ||      sJ t        j                  g d      }t        j                  ||      }t        j                  ||j                               }t        j                  ||      sJ t        j                  g d      }	t        j                  ||	      }t        j                  |j                         |	      }t        j                  ||      sJ  ||t              }
|j                  t              }t        j                  |
j                         |      sJ y )	NC)orderFr   r         ?.)r          @      @g      @)r/   r   r.   flagsc_contiguousf_contiguousr0   rR   r   r   dotboolr   )r4   r   r   rr   chkre   adense_dot_densecheckbspboolarrbools               r   test_toarrayzTestCommon1D.test_toarray  s   % mmo~~c5)))yy%%)?)???? mm#m&~~c5)))yy%%%%yy%%%% mm#m&~~c5)))yy%%%%yy%%%% hhu{{%++6#~~c5))) C#~~c5))) HH)*&&E*q%--/*~~ou555HH)*&&*u}}*~~ou555 5-,,t$~~fnn.888r   c                    ||   D ]  \  }}}|j                         }d|d<   |}||z   }t        j                  ||j                         |z         sJ ||dd z   }t        j                  ||j                         |d   z         rJ  y )Nr   r   r   copyr   r.   r/   	r4   r   r   r   r   rr   r   r   cs	            r   test_addzTestCommon1D.test_add5  s    !29!= 
	9E3
AAaDAAA>>!QYY[1_555 AaF
A>>!QYY[1Q4%7888
	9r   c                     ||   D ]K  \  }}}|j                         }d|d<   |}||z   }t        j                  |||j                         z         rKJ  y )Nr   r   r   r   s	            r   	test_raddzTestCommon1D.test_raddB  s]    !29!= 	6E3
AAaDAAA>>!Q_555	6r   c                    ||   D ]  \  }}}|t        j                  d      k(  r!t        j                  ||z
  g d      sJ t        j                  ||z
  g d      sJ t        j                  d|z
  j                         |       sJ  |g dd      }t        j                  ||z
  ||j                         z
        sJ t        j                  ||z
  |j                         |z
        sJ t        j                  |j                         |z
  |j                         |z
        sJ t        j                  ||j                         z
  ||j                         z
        sJ t        j                  |d d |z
  |d d |z
        rJ  y )Nr   )r   r   r   r   r   )r   rD   r   r$   r   r   r   )r   r   r.   r/   )r4   r   r   r   r   rr   rF   s          r   	test_rsubzTestCommon1D.test_rsubJ  sV   !29!= 	BE3((>>3;>>>>>53;>>>>>1u9"5"5"7#>>>-s3A>>37S199;->???>>1s7QYY[3->???>>!))+"5qyy{S7HIII>>%!))+"5sQYY[7HIII >>#bq'E/3r7S=AAA!	Br   c                 
   t        j                  g d      } ||      }t        j                  g dg      j                  }t        j                  ||z  |j	                         |z        sJ |t        j                  g d      z  j
                  dk(  sJ |t        j                  g d      z  dk(  sJ |t        j                  g d      z  j
                  dk(  sJ |t        j                  dgdgdgg      z  j
                  dk(  sJ t        |t        g dg      j                  z  t         j                        sJ |t        j                  g dg      j                  z  j
                  dk(  sJ t        j                  ddg      t        j                  g d      t        j                  dgdgg      g}|D ]7  }t        j                  t        d	
      5  |j                  |       d d d        9 t        j                  |j	                         g d      }t        j                  |t        j                  g d      z  |      sJ t        j                  |dgdgdggz  |j                        sJ y # 1 sw Y   xY w)N)r$   r   r   )r   r$   r   r      r   r$   r   r   r$   r   rZ   zdimension mismatchr!   )r   r   rS   rl   r/   rR   
isinstancer   ndarrayr&   r'   r(   
__matmul__r   )r4   r   rF   Aspcolbad_vecsrT   
dot_results           r   test_matveczTestCommon1D.test_matvec]  s   HH[!lhh	{#%%{{39ckkmc&9:::BHHY''.."444RXXi((B...bhhy))00B666bhhaS1#//66"<<<#	{ 3 5 55rzzBBBbhh	{+---44::: HHaV$bhh|&<bhhaSz>RS 	"Az1EF "q!" "	" VVCKKM95
{{3)!44jAAA{{31#sQC0*,,???" "s   I99J	c                     ||      }t        j                  g d|z  t        j                  g d|j                                     sJ t        j                  g dg      }t        j                  ||z  ||j                         z        sJ y )Nr   )r   rl   r   r/   r   )r4   r   r   Mrows        r   test_rmatveczTestCommon1D.test_rmatvecy  si    e{{<!+RVVL!))+-NOOOhh~&{{37C!))+$5666r   c                 X   |t        j                  g       fD ]  } ||      }t        j                  |j                         |      sJ t        j                  |j	                         j                         |      sJ t        j                  |j
                  |j
                        rJ  y r   )r   r   r.   r/   	transposer   )r4   r   r   rF   Bs        r   test_transposezTestCommon1D.test_transpose  s    "& 	4A!A>>!))+q111>>!++-"7"7"91===>>!''177333		4r   c                     ||   D ]F  \  }}}||z   }t        j                  |||z         sJ ||z   }t        j                  |||z         rFJ  y r   )r   r.   )r4   r   r   r   r   rr   sum1sum2s           r   test_add_dense_to_sparsez%TestCommon1D.test_add_dense_to_sparse  s_    !29!= 	3E3;D>>$c	2223;D>>$c	222		3r   c                     t        j                  d      } ||      }|j                  dvr-t        ||      D ]  \  }}t        j                  ||      rJ  y y )NrN   )coodiabsr)r   arangeformatzipr.   )r4   r   r   rF   rT   rU   s         r   test_iteratorzTestCommon1D.test_iterator  sW    IIaLaL8800Aq	 ,1~~a+++, 1r   c                 *   t        j                  g d      } ||      }|j                  d      J t        j                  |j	                         g d      sJ |j                  d       t        j                  |j	                         g d      sJ y )N)r   r   r   rZ   r-   )r   r   r   )rN   )r   r   r   r   r   )r   r   resizer.   r/   r   s       r   test_resizezTestCommon1D.test_resize  sl    HH\"aLxx~%%%~~aiik9555	~~aiik?;;;r   N)#__name__
__module____qualname____doc__r5   r8   r<   r?   rG   rJ   rX   r[   rs   r}   r   r   r   r   r   r   r   sup_complexr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+   r+   .   s    ?B
=7$
8,('/ (&	B	D/@ X X 
 
 X X,9\96B&@8743,<r   r+   c                       e Zd Zd Zd Zy)TestGetSet1Dc                    t        j                  g d      } ||      }|j                  d   }t        | |      D ]   }t        j                  ||   ||         r J  dD ]=  }t        j                  t        t        fd      5  |j                  |       d d d        ? |d   dk(  sJ t        j                  t        d      5  |j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	N)rZ   r   r   r   )r   rD   index value out of boundsr!   )r   rZ   )rZ   )
r   r   rR   ranger.   r&   r'   
IndexErrorr{   __getitem__)r4   r   r   rF   Njijs          r   test_getelementzTestGetSet1D.test_getelement  s    HHYaLGGAJr1 	.A>>!A$!---	.  	"BY'/J " b!" "	" w!||]]:-HI 	 MM$	  	 " "	  	 s   C!C-!C*	-C6c                    t         j                  } |d|      }t         j                  j                         5 }|j	                  t
        j                  j                  d        |d      |d<    |d      |d<    |d      |d<    |d	      |d
<   d|d<    |d      |d<    |d      |d<   dD ]8  }t        j                  t        d      5  |j                  |d       d d d        : 	 d d d        y # 1 sw Y   NxY w# 1 sw Y   y xY w)NrP   r   z?Changing the sparsity structure of a cs[cr]_matrix is expensiver   r   r   g      "@   rM   r   r^   rN   )i)r   )   i)r   )   r   r!   g     ^@)r   float64testingsuppress_warningsfilterr   r   SparseEfficiencyWarningr&   r'   r   __setitem__)r4   r   r   rF   supr   s         r   test_setelementzTestGetSet1D.test_setelement  s    

e5)ZZ))+ 	-sJJ		11Q 8AaD8AaD:AaD!HAbEAaD1XAcF!HAbE- -]]:5PQ -MM"e,- --	- 	-- -	- 	-s$   BC>C2
C>2C;7C>>DN)r   r   r   r   r  r   r   r   r   r     s     (-r   r   )$r   r&   numpyr   scipyr   scipy.sparser   r   r   r   scipy.sparse._sputilsr   r   scipy._lib._utilr	   r   r  r   r  r   r   	dok_arrayr   int64r   
complex128r   fixturer   r   markparametrizer)   r+   r   r   r   r   <module>r     sA   0     ; + jj**,   > " ii!!299#6#67
xxR]]3 ' '   y)Y	&RS  T  j1n< n< 2n<b ryy':':&;<(- (- =(-r   