U
    /d8                     @   s  d dl Z d dlZd dlmZ d dlZd dlm	  m
Z dZdd eD Zed ddd gdd d dgddd d ggZed dgdd ggZejdd d dgdddd gd ddd gd d ddgged	Zd
d eD Zdd eD Zdd eD Ze jjdeedZe jjdeedZe jjdeedZedd Zedd Zedd Zedd Zedd Zedd Z edd Z!edd  Z"ed!d" Z#ed#d$ Z$ed%d& Z%ed'd( Z&ed)d* Z'ed+d, Z(ed-d. Z)ed/d0 Z*ed1d2 Z+ed3d4 Z,ed5d6 Z-ed7d8 Z.ed9d: Z/ed;d< Z0ed=d> Z1d?d@ Z2edAdB Z3ee jdCdDdEdFdGdHdIdJdKdLdMg
dNdO Z4ee jdCdPdQgdRdS Z5edTdU Z6edVdW Z7edXdY Z8dZd[ Z9d\d] Z:ed^d_ Z;dS )`    N)bsrcoocsccsrdiaZdokZlilc                 C   s   g | ]}t tj| d qS )Z_array)getattrscipysparse).0T r   E/tmp/pip-unpacked-wheel-9gxwnfpp/scipy/sparse/tests/test_array_api.py
<listcomp>	   s    r               )Zdtypec                 C   s   g | ]}|t qS r   Ar
   Zsparrayr   r   r   r       s     c                 C   s   g | ]}|t qS r   Br   r   r   r   r   !   s     c                 C   s   g | ]}|t qS r   Xr   r   r   r   r   "   s     r   )idsr   r   c                 C   sL   t | jddtjrtd| jddjdks2t| jddjdksHtd S )Nr   ZaxisExpected array, got matrix)r   r   )r   )
isinstancesumnpmatrixAssertionErrorshaper   r   r   r   test_sum/   s
    r#   c                 C   s    t | jddtjrtdd S )Nr   r   r   )r   Zmeanr   r    r!   r   r   r   r   	test_mean7   s    r$   c                 C   s   t |  tjrtdd S Nr   )r   todenser   r    r!   r   r   r   r   test_todense=   s    r'   c              	   C   s   | j jd d dkrd S tt | dd d f  W 5 Q R X tt | d d df  W 5 Q R X tt | dddgf  W 5 Q R X tt | ddgdf  W 5 Q R X | dg jstd| dddggf jstd| ddggdf jstd| d d ddgf jstdd S )	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!   r   r   r   r   test_indexingC   s    r.   c                 C   s*   t j| j}t| | t jr&tdd S r%   )r   randomr"   r   r    r!   )r   r   r   r   r   test_dense_additionZ   s    r0   c                 C   s   | |  j stdd S r%   r-   r!   r   r   r   r   test_sparse_addition`   s    r2   c                 C   s(   t | |   | d ks$td S Nr   )r   allr&   powerr!   r   r   r   r   test_elementwise_mule   s    r6   c              	   C   s   t t d |   W 5 Q R X t t* tdtjt	d
dd  W 5 Q R X td|  |  d ksvtt|  |  |  d kstd S )Nr      r   )r*   r+   	TypeError
ValueErrorr   Zeyer   r	   	csr_arrayZarangeZreshaper4   r&   r!   r   r   r   r   test_elementwise_rmulj   s    .r;   c                 C   s,   t | | j  | | j ks(td S N)r   r4   r   r&   dotr!   r   r   r   r   test_matmulw   s    r>   c                 C   s(   | d j std| d j s$tdd S )Nr   r   r   r1   r   r   r   r   test_pow|   s    r?   c                 C   s   t | |  tjstd S r<   )r   r   Zndarrayr!   r   r   r   r   test_sparse_divide   s    r@   c                 C   s   | d j stdd S )Nr   r   r1   r   r   r   r   test_dense_divide   s    rA   c              	   C   s"   t tj | j W 5 Q R X d S r<   )r*   warnsr   VisibleDeprecationWarningr   r   r   r   r   test_no_A_attr   s    rD   c              	   C   s"   t tj | j W 5 Q R X d S r<   )r*   rB   r   rC   Hr   r   r   r   test_no_H_attr   s    rF   c                 C   s$   |  djst| djs td S )Nr   )Zgetcolr-   r!   Zgetrowr   r   r   r   test_getrow_getcol   s    rG   c                 C   s2   | j d krd S | j  }dD ]}||kstqd S )N)r    Zmatrices)__doc__lowerr!   )r   Zdocstrphraser   r   r   test_docstr   s
    

rK   c                 C   s2   t | }t|ddddg | ddddg  d S )Nr   r   r   r   )splaZaslinearoperatornptassert_allclose)r   Lr   r   r   test_as_linearoperator   s    
rP   c                 C   sL   | j jd d dkrd S t| }|js,tt| t	j
|   d S Nr   r   )r(   r)   rL   invr-   r!   rM   rN   r&   r   linalgr   Cr   r   r   test_inv   s
    

rV   c                 C   sV   | j jd d dkrd S tj| }t| }|js8tt	
| t|  d S rQ   )r(   r)   r   r	   Z
csc_matrixrL   expmr-   r!   rM   rN   r&   )r   ZBmatrU   r   r   r   	test_expm   s    

rX   c              	   C   sH   | j jd d dkrd S tt| tddgt| ddg  d S Nr   r   r   r   )	r(   r)   rM   rN   rL   Zexpm_multiplyr   arrayrW   r   r   r   r   test_expm_multiply   s    r[   c                 C   s&   t | }t|tj|   d S r<   )rL   normrM   rN   r   rS   r&   )r   rU   r   r   r   	test_norm   s    
r]   c                 C   s(   t | }t|tj|  d d S )Nr   )rL   Z
onenormestrM   rN   r   rS   r\   r&   rT   r   r   r   test_onenormest   s    
r^   c                 C   sF   | j jd d dkrd S tt| ddgtj| 	 ddg d S )Nr   )r   r   r   r   )
r(   r)   rM   rN   rL   Zspsolver   rS   solver&   r   r   r   r   test_spsolve   s    r`   c               	   C   sL   t jddddgddddgddddgddddgg} t| ddddg d S Nr   r   r   r   r   )r   r	   r:   rL   Zspsolve_triangularr   r   r   r   test_spsolve_triangular   s    



rb   c                 C   sR   | j jd d dkrd S t| }t|tddgtj	| 
 ddg d S rY   )r(   r)   rL   Z
factorizedrM   rN   r   rZ   rS   r_   r&   )r   LUr   r   r   test_factorized   s    
rd   solverZbicgZbicgstabZcgZcgsZgmresZlgmresminresZqmrZgcrotmkZtfqmrc                 C   s\   |dkri }nddi}t t|| tddgf|\}}|dksDttj|ddgdd d S )	Nrf   atolgh㈵>r   r   r   g?rg   )r   rL   r   rZ   r!   rM   rN   )r   re   kwargsxinfor   r   r   test_solvers  s    "rl   ZlsqrZlsmrc                 C   s4   t t|| dddg^}}t| | dddg d S )Nr   r   r   )r   rL   rM   rN   )r   re   rj   _r   r   r   test_lstsqr  s    rn   c                 C   s.   t j| dd\}}t| | |d |  d S Nr   kr   )rL   ZeigsrM   rN   r   evr   r   r   	test_eigs  s
    
ru   c                 C   s8   | | j  } tj| dd\}}t| | |d |  d S ro   )r   rL   ZeigshrM   rN   rr   r   r   r   
test_eigsh'  s    

rv   c                 C   sZ   t j| dd\}}}tj|  \}}}t|}t|d d }tj||dd d S )Nr   rp   gMbP?rh   )	rL   Zsvdsr   rS   Zsvdr&   sortrM   rN   )r   usZvhu2s2Zvh2r   r   r   	test_svds1  s
    
r|   c               
   C   sj   t jddddgddddgddddgddddgg} t| }t|t	ddddgddddg d S ra   )
r   r	   	csc_arrayrL   ZsplurM   rN   r_   r   rZ   r   rc   r   r   r   	test_splu:  s    




r   c               
   C   sj   t jddddgddddgddddgddddgg} t| }t|t	ddddgddddg d S ra   )
r   r	   r}   rL   ZspilurM   rN   r_   r   rZ   r~   r   r   r   
test_spiluE  s    




r   c                 C   s    t | d  |  d  d S r3   )rM   Zassert_equalr&   r   r   r   r   test_power_operatorP  s    r   )<r*   Znumpyr   Znumpy.testingZtestingrM   Zscipy.sparser   Zscipy.sparse.linalgr	   rS   rL   Zsparray_typesZsparray_classesrZ   r   r   floatr   ZsparraysZsquare_sparraysZeig_sparraysmarkZparametrizeZparametrize_sparraysZparametrize_square_sparraysZparametrize_eig_sparraysr#   r$   r'   r.   r0   r2   r6   r;   r>   r?   r@   rA   rD   rF   rG   rK   rP   rV   rX   r[   r]   r^   r`   rb   rd   rl   rn   ru   rv   r|   r   r   r   r   r   r   r   <module>   s   






      



























 

	
