
    xf4                        d dl Z d dlZd dlmZ d dlZd dlm	c m
Z dZeD  cg c]  }  eej                  |  d       c} Z ej                  g dg dg dg      Z ej                  d dgdd gg      Z ej                  g d	g d
g dg dge      ZeD cg c]
  } |e       c}ZeD cg c]
  } |e       c}ZeD cg c]
  } |e       c}Ze j.                  j1                  dee      Ze j.                  j1                  dee      Ze j.                  j1                  dee      Zed        Zed        Zed        Zed        Zed        Z ed        Z!ed        Z"ed        Z#ed        Z$ed        Z%ed        Z&ed        Z'ed        Z(ed        Z)ed         Z*ed!        Z+ed"        Z,ed#        Z-ed$        Z.ed%        Z/ed&        Z0ed'        Z1ed(        Z2ed)        Z3d* Z4ed+        Z5ee j.                  j1                  d,g d-      d.               Z6ee j.                  j1                  d,d/d0g      d1               Z7ed2        Z8ed3        Z9ed4        Z:d5 Z;d6 Z<e j.                  j1                  d7ej                  jz                  d8d9gfej                  j|                  d8d9gfej                  j~                  d:d;gfg      e j.                  j1                  d<ej                  ej                  g      d=               ZBd> ZCd? ZDd@ ZEdA ZFdB ZGdC ZHdD ZIdE ZJdF ZKe j.                  j1                  dGej                  j                  ej                  j                  f      dH        ZNdI ZOdJ ZPdK ZQdL ZRe j.                  j1                  dMdNej                  j                  fdOej                  j                  fdPej                  j                  fdQej                  j                  fdRej                  j                  fdSej                  j                  fdTej                  j                  ff      dU        ZZyc c} w c c}w c c}w c c}w )V    N)bsrcoocsccsrdiadoklil_array)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   )dtypeA)idsBXc                     t        | j                  d      t        j                        rJ d       | j                  d      j                  dk(  sJ | j                  d      j                  dk(  sJ y )Nr   axisExpected array, got matrix)r   r   )r   )
isinstancesumnpmatrixshaper   s    C/usr/lib/python3/dist-packages/scipy/sparse/tests/test_array_api.pytest_sumr   /   sf    !%%Q%-3 %$%355a5=$&&&55a5=$&&&    c                 f    t        | j                  d      t        j                        rJ d       y )Nr   r   r   )r   meanr   r   r   s    r   	test_meanr#   7   s-    !&&a&."))4 %$%44r    c                    t        | d      r1t        | j                  d      t        j                        rJ d       t        | d      r1t        | j                  d      t        j                        rJ d       t        | d      r1t        | j                  d      t        j                        rJ d       t        | d      r2t        | j                  d      t        j                        rJ d       y y )Nminr   r   r   maxargminargmax)hasattrr   r%   r   r   r&   r'   r(   r   s    r   test_min_maxr*   =   s     q%aeeemRYY7 	)(	)7q%aeeemRYY7 	)(	)7q(ahhAh.		: 	)(	):q(ahhAh.		: 	)(	):: r    c                 b    t        | j                         t        j                        rJ d       y Nr   )r   todenser   r   r   s    r   test_todenser.   N   s)    !))+ryy1 %$%11r    c                    | j                   j                  d d dv ry t        j                  t              5  | dd d f    d d d        t        j                  t              5  | d d df    d d d        t        j                  t              5  | dddgf    d d d        t        j                  t              5  | ddgdf    d d d        | dg   j
                  sJ d       | dddggf   j
                  sJ d       | ddggdf   j
                  sJ d       | d d ddgf   j
                  sJ d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)	Nr   )r   r   r   r   r   r   z(Expected sparse array, got sparse matrixz"Expected ndarray, got sparse arrayz)Expected sparse array, got something else)	__class____name__pytestraisesNotImplementedError	_is_arrayr   s    r   test_indexingr6   T   se   {{BQ#88	*	+ 	!Q$ 
*	+ 	!Q$ 
*	+ 	!aV) 
*	+ 	1a&!) aS6GGGQ!Q[>##I%II#q!fXq[>##I%II#QAY<!!N#NN!    s/   
D3!
D?
E7
E3D<?EEE c                     t         j                  j                  | j                        }t        | |z   t         j                        rJ d       y r,   )r   randomr   r   r   )r   r   s     r   test_dense_additionr9   k   s;    
		!A!a%+I-II++r    c                 0    | | z   j                   sJ d       y r,   r5   r   s    r   test_sparse_additionr<   q       E:::r    c                     t        j                  | | z  j                         | j                  d      j                         k(        sJ y )Nr   )r   allr-   powerr   s    r   test_elementwise_mulrA   v   s5    661q5//#qwwqz'9'9';;<<<r    c                 J   t        j                  t              5  d | z   d d d        t        j                  t              5  t	        j
                  d      t        j                  j                  t	        j                  d      j                  dd            z   d d d        t	        j                  d| z  | j                         dz  k(        sJ t	        j                  | j                         | z  | j                         dz  k(        sJ y # 1 sw Y   xY w# 1 sw Y   xY w)Nr      r   )r2   r3   	TypeError
ValueErrorr   eyescipysparse	csr_arrayarangereshaper?   r-   r   s    r   test_elementwise_rmulrL   {   s    	y	! q 
z	" G
q	ELL**299Q<+?+?1+EFFG 661q5aiikAo.///66199;?		q(89::: G Gs   DADDD"c                     t        j                  | | j                  z  j                         | j	                  | j                        j                         k(        sJ y N)r   r?   Tr-   dotr   s    r   test_matmulrQ      s?    661qss7##%qss););)==>>>r    c                 :   t        | dz  t        j                  j                        sJ d       t	        j
                  | dz  j                         | j                         dz         t        j                  t        d      5  | dz   d d d        y # 1 sw Y   y xY w)Nr   r   z
zero power)matchr   )
r   rG   rH   sparraynptassert_equalr-   r2   r3   r4   r   s    r   test_power_operatorrW      s{    q!tell223Q5QQ3 ad^^%		a'78 
*,	? 	1  s   BBc                 B    t        | | z  t        j                        sJ y rN   )r   r   ndarrayr   s    r   test_sparse_dividerZ      s    a!eRZZ(((r    c                     t        j                  t              5  | | j                         z  j                  sJ 	 d d d        y # 1 sw Y   y xY wrN   )r2   warnsRuntimeWarningr-   r5   r   s    r   test_sparse_dense_divider^      s<    	n	% +AIIK****+ + +s    AAc                 0    | dz  j                   sJ d       y )Nr   r   r;   r   s    r   test_dense_divider`      r=   r    c                     t        j                  t        j                        5  | j                   d d d        y # 1 sw Y   y xY wrN   )r2   r\   r   VisibleDeprecationWarningr   r   s    r   test_no_A_attrrc      0    	b22	3 	  	   :Ac                     t        j                  t        j                        5  | j                   d d d        y # 1 sw Y   y xY wrN   )r2   r\   r   rb   Hr   s    r   test_no_H_attrrh      rd   re   c                 x    | j                  d      j                  sJ | j                  d      j                  sJ y )Nr   )_getcolr5   _getrowr   s    r   test_getrow_getcolrl      s0    99Q<!!!!99Q<!!!!r    c                 n    t        j                  |       }t        j                  |g dz  | g dz         y )Nr   r   r   r   )splaaslinearoperatorrU   assert_allclose)r   Ls     r   test_as_linearoperatorrs      s,    a AL(!l*:;r    c                 "   | j                   j                  d d dk7  ry t        j                  |       }|j                  sJ t        j                  |j                         t        j                  j                  | j                                      y Nr   r   )
r0   r1   ro   invr5   rU   rq   r-   r   linalgr   Cs     r   test_invrz      s`    {{BQ5(A;;;		RYY]]199;%?@r    c                 L   | j                   j                  d d dk7  ry t        j                  j	                  |       }t        j                  |       }|j                  sJ t        j                  |j                         t        j                  |      j                                y ru   )r0   r1   rG   rH   
csc_matrixro   expmr5   rU   rq   r-   )r   Bmatry   s      r   	test_expmr      sv    {{BQ5(<<""1%D		!A;;;					$!r    c           	          | j                   j                  d d dk7  ry t        j                  t	        j
                  | t        j                  ddg            t	        j                  |       ddgz         y Nr   r   r   r   )	r0   r1   rU   rq   ro   expm_multiplyr   arrayr}   r   s    r   test_expm_multiplyr      s]    {{BQ5(1bhh1v./		!1vr    c                     t        j                  |       }t        j                  |t        j
                  j                  | j                                      y rN   )ro   normrU   rq   r   rw   r-   )r   ry   s     r   	test_normr      s2    		!A299>>!))+67r    c                     t        j                  |       }t        j                  |t        j
                  j                  | j                         d             y )Nr   )ro   
onenormestrU   rq   r   rw   r   r-   rx   s     r   test_onenormestr      s5    A299>>!))+q9:r    c                     | j                   j                  d d dvry t        j                  t	        j
                  | ddg      t        j                  j                  | j                         ddg             y )Nr   )r   r   r   r   )
r0   r1   rU   rq   ro   spsolver   rw   solver-   r   s    r   test_spsolver      sZ    {{BQ~5QA
				aV,r    c                      t         j                  j                  g dg dg dg dg      } t        j                  | g d       y N)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   rn   )rG   rH   rI   ro   spsolve_triangular)r   s    r   test_spsolve_triangularr      s9    	  	A 	A|,r    c                 &   | j                   j                  d d dk7  ry t        j                  |       }t	        j
                   |t        j                  ddg            t        j                  j                  | j                         ddg             y r   )r0   r1   ro   
factorizedrU   rq   r   r   rw   r   r-   )r   LUs     r   test_factorizedr     sk    {{BQ5(		B
288QF
				aV,r    solver)
bicgbicgstabcgcgsgmreslgmresminresqmrgcrotmktfqmrc                     |dk(  ri }nddi} t        t        |      | t        j                  ddg      fi |\  }}|dk\  sJ t	        j
                  |ddgd       y )	Nr   atolgh㈵>r   r   r   g?r   )getattrro   r   r   rU   rq   )r   r   kwargsxinfos        r   test_solversr     sg     $#gdF#ArxxA'7B6BGAt199Aq6-r    lsqrlsmrc                 p     t        t        |      | g d      ^}}t        j                  | |z  g d       y )Nr   r   r   )r   ro   rU   rq   )r   r   r   _s       r   test_lstsqrr   %  s1     "GD&!!Y/EAAy)r    c                 v    t        j                  | d      \  }}t        j                  | |z  |d   |z         y Nr   kr   )ro   eigsrU   rq   r   evs      r   	test_eigsr   /  s6    99Q!DAq	A	!qr    c                     | | j                   z   } t        j                  | d      \  }}t        j                  | |z  |d   |z         y r   )rO   ro   eigshrU   rq   r   s      r   
test_eigshr   8  sC    	ACCA::a1DAq	A	!qr    c                 &   t        j                  | d      \  }}}t        j                  j	                  | j                               \  }}}t        j                  |      }t        j                  |d d       }t        j                  ||d       y )Nr   r   gMbP?r   )	ro   svdsr   rw   svdr-   sortrU   rq   )r   usvhu2s2vh2s          r   	test_svdsr   B  sh    yya HAq"))--		,KBC

A	BQB2D)r    c                      t         j                  j                  g dg dg dg dg      } t        j                  |       }t        j                  |j                  t        j                  g d            g d       y r   )
rG   rH   	csc_arrayro   splurU   rq   r   r   r   r   r   s     r   	test_splur   K  sX    	  	A 
1B,!78,Gr    c                      t         j                  j                  g dg dg dg dg      } t        j                  |       }t        j                  |j                  t        j                  g d            g d       y r   )
rG   rH   r   ro   spilurU   rq   r   r   r   r   s     r   
test_spilur   V  sX    	  	A 
AB,!78,Gr    zcls,indices_attrsindicesindptrrowcolexpected_dtypec                 d   t         j                  j                  t        j                  d      j                  dd            }|j                  |j                  j                  |      |j                  j                  |      ff} | |      }|D ]  }t        ||      j                  |k(  rJ   | |d      }|D ]  }t        ||      j                  |k(  rJ  t        | t         j                  j                  j                        r|j                         }|j                  |j                   j                  |      |j"                  j                  |      f} | |      }|D ]  }t        ||      j                  |k(  rJ   | |d      }|D ]  }t        ||      j                  |k(  rJ  y y )N	   r   )r   r   )r   )rG   rH   	coo_arrayr   rJ   rK   datar   astyper   r   r   
issubclass_compressed
_cs_matrixtocsrr   r   )	clsindices_attrsr   input_array	coo_tupleresultattrinput_array_csr	csr_tuples	            r   test_index_dtype_compressedr   a  s   & ,,((1)=)=a)CDKOO"">2OO"">2	
I ^F =vt$**n<<<= &)F =vt$**n<<<= #u||//::;%++-  ##**>:"")).9
	 Y! 	AD64(...@@@	A Yf-! 	AD64(...@@@	A <r    c                  b    t         j                  j                  g d      } | j                  rJ y )N)r   r   r   )rG   rH   diagsr5   ms    r   test_default_is_matrix_diagsr     s$    9%A{{?{r    c                  ^    t         j                  j                  d      } | j                  rJ y Nr   )rG   rH   rF   r5   r   s    r   test_default_is_matrix_eyer     s$    A{{?{r    c                  h    t         j                  j                  g dddd      } | j                  rJ y )Nr   r   r   )rG   rH   spdiagsr5   r   s    r   test_default_is_matrix_spdiagsr     s*    Y1a0A{{?{r    c                  ^    t         j                  j                  d      } | j                  rJ y r   )rG   rH   identityr5   r   s    r   test_default_is_matrix_identityr     s$    a A{{?{r    c                      t         j                  j                  t        j                  ddgddgg      t        j                  ddgddgg            } | j
                  rJ y )Nr   r   r   r   rG   rH   kronr   r   r5   r   s    r   !test_default_is_matrix_kron_denser     W    
1a&1a&!"BHHq!fq!f-=$>	A {{?{r    c                      t         j                  j                  t        j                  ddgddgg      t        j                  ddgddgg            } | j
                  rJ y )Nr   r   r   r   r   r   r   s    r   "test_default_is_matrix_kron_sparser     r   r    c                      t         j                  j                  t        j                  ddgddgg      t        j                  ddgddgg            } | j
                  rJ y )Nr   r   )rG   rH   kronsumr   r   r5   r   s    r   test_default_is_matrix_kronsumr     sW    
1a&1a&!"BHHq!fq!f-=$>	A {{?{r    c                  `    t         j                  j                  dd      } | j                  rJ y r   )rG   rH   r8   r5   r   s    r   test_default_is_matrix_randomr     s&    Aq!A{{?{r    c                  `    t         j                  j                  dd      } | j                  rJ y r   )rG   rH   randr5   r   s    r   test_default_is_matrix_randr    s&    !QA{{?{r    fnc                     t         j                  j                  t        j                  d            }t         j                  j                  ddgddgg      } | ||g      }|j
                  rJ y)zbSame idea as `test_default_construction_fn_matrices`, but for the
    stacking creation functions.r   r   r   N)rG   rH   
coo_matrixr   rF   r5   )r  r   r   r   s       r   test_default_is_matrix_stacksr    s\     	q	*A!Q!Q 01A
Aq6
A{{?{r    c                     t         j                  j                  t        j                  d            } t         j                  j                  dgdgg      }t         j                  j                  dgg      }t         j                  j                  | ||f      }|j                  rJ t         j                  j                  | dgd|gg      }|j                  rJ y)z]Same idea as `test_default_construction_fn_matrices`, but for the block
    creation functionr   r   r   N)rG   rH   r  r   rF   
block_diagr5   bmat)r   r   ry   r   s       r   ,test_blocks_default_construction_fn_matricesr    s     	q	*A!qc
+A!&A 	Aq	*A{{? 	At9tQi01A{{?{r    c                     t         D ]u  } t        t        j                  |  d      } |ddgg      }|j                  | k(  sJ |j
                  | k(  sJ t        j                  t              5  d|_        d d d        w y # 1 sw Y   xY w)Nr
   r   r   qqq)	sparray_typesr   rG   rH   format_formatr2   r3   AttributeError)fmtarr_clsMs      r   test_format_propertyr    s     %,,3%v7aVHxx3yyC]]>* 	AH	 	
	 	s   -B  B		c                     t         j                  j                  d      } t         j                  j                  |       }| j                  rJ |j                  sJ t         j                  j                  |      sJ t         j                  j                  |       sJ t         j                  j                  |j                               rJ t         j                  j                  | j                               rJ y r   )rG   rH   rF   rI   r5   issparser-   r   as     r   test_issparser    s    Aq!A{{?;;; <<  ###<<  ### ||$$QYY[111||$$QYY[1111r    c                     t         j                  j                  d      } t         j                  j                  |       }| j                  rJ |j                  sJ t         j                  j                  |      rJ t         j                  j                  |       sJ t         j                  j                  |j                               rJ t         j                  j                  | j                               rJ y r   )rG   rH   rF   rI   r5   
isspmatrixr-   r  s     r   test_isspmatrixr    s    Aq!A{{?;;; ||&&q)))<<""1%%% ||&&qyy{333||&&qyy{3333r    )r  r  r   r   r   r   r   r   r	   c                 b   t         j                  j                  d|       }t         j                  j                  |      j	                  |       }|j
                  rJ |j
                  sJ  ||      rJ  ||      sJ  ||j                               rJ  ||j                               rJ y )Nr   )r  )rG   rH   rF   rI   asformatr5   r-   )r  r  r   r  s       r   test_isspmatrix_formatr     s     	3'Aq!**3/A{{?;;; !u9a5L5 !))+!))+r    )[r2   numpyr   numpy.testingtestingrU   scipy.sparserG   scipy.sparse.linalgrH   rw   ro   r  r   sparray_classesr   r   r   floatr   sparrayssquare_sparrayseig_sparraysmarkparametrizeparametrize_sparraysparametrize_square_sparraysparametrize_eig_sparraysr   r#   r*   r.   r6   r9   r<   rA   rL   rQ   rW   rZ   r^   r`   rc   rh   rl   rs   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rI   r   r   int64int32r   r   r   r   r   r   r   r   r   r  hstackvstackr  r  r  r  r  isspmatrix_bsrisspmatrix_cooisspmatrix_cscisspmatrix_csrisspmatrix_diaisspmatrix_dokisspmatrix_lilr   )rO   rT   s   00r   <module>r;     s       " "A 2?,-GELLQCv,' BHH  BHHFF 
 BHH	
 
 '667GAJ6-<='71:=*9:w
:{{..} /   %kk55m 6   ";;22= 3  
 ' ' % %
 ) )  % %
 O O, J J
 ; ; = = 	; 	; ? ?   ) ) + + ; ;  
  
 " " < <
 A A     8 8
 ; ;
  -   
. . V*	 
*
     * *HH  LL""!	

 LL""!	

 LL""EN	
" )BHHbhh+?@ A A#$ AF





  3 3U\\5H5HIJ K 24 	++,	++,	++,	++,	++,	++,	++,]. 7=:s   QQ
/QQ