U
    ?h                     @   s  d dl Z d dlZd dlmZ d dlm  mZ d dl	m
Z
mZ zd dlZW n ek
rb   dZY nX e jjedkddZdZe de jde jjedgdfZejejejejejejgZe jed	d
d Ze jed	dd Ze jdd Ze jdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&d d! Z'd"d# Z(d$d% Z)d&d' Z*d(d) Z+d*d+ Z,d,d- Z-d.d/ Z.d0d1 Z/d2d3 Z0dS )4    N)assert_allcloseassert_equalzpydata/sparse not installed)reasonz;pydata/sparse (0.8) does not implement necessary operationsZCOOZDOK)Zmarks)paramsc                 C   s   t t| jS N)getattrsparseparamrequest r   ^/var/www/html/venv/lib/python3.8/site-packages/scipy/sparse/linalg/tests/test_pydata_sparse.py
sparse_cls"   s    r   c                 C   s   | j S r   )r	   r
   r   r   r   sp_sparse_cls'   s    r   c                 C   s*   t jd t jdd}||| |fS Ni  	   )nprandomseedrand)r   r   A_denser   r   r   same_matrix,   s    r   c                 C   sB   t jd t jdd}||j }| |}t jd}|||fS r   )r   r   r   r   T)r   r   A_sparsebr   r   r   matrices3   s    
r   c                 C   sL   | \}}}t j||dd\}}|dks*tt|tjs:tt|| | d S )NgV瞯<Zatolr   )splinZgmresAssertionError
isinstancer   ndarrayr   )r   r   r   r   xinfor   r   r   test_isolve_gmres=   s
    
r#   c                 C   s<   | \}}}t ||}t ||}t|d |d dd d S )Nr   g?̔>r   )r   lsmrr   r   r   r   r   Zres0resr   r   r   	test_lsmrG   s    
r'   c                  C   s6   t jtdtdtddd } t| jd d S )N)
      r(   r)   )Ar   x0r   )r)   )r   r$   r   onesZzerosr   shape)r!   r   r   r   test_lsmr_output_shapeO   s    &r.   c                 C   s<   | \}}}t ||}t ||}t|d |d dd d S )Nr   gh㈵>r   )r   Zlsqrr   r%   r   r   r   	test_lsqrT   s    
r/   c                 C   s   | \}}}t |d }||}tj|d|d\}}tj|d|d\}}	t|| t|	| ||fD ]}
tj||d|d\}}tj||
d|d\}}	t|| t|	| tj||d|d\}}tj||
d|d\}}	t|| t|	| qfd S )N      kv0)Mr3   r4   )r   Zdiag	__class__r   Zeigsr   Zeigsh)r   r   r   r4   ZM_denseZM_sparsew_densev_densewvr5   r   r   r   	test_eigs[   s     






r;   c           
      C   sX   | \}}}t j|d|d\}}}t j|d|d\}}}	t|| t|| t|	| d S )Nr0   r2   )r   Zsvdsr   )
r   r   r   r4   Zu0s0Zvt0usvtr   r   r   	test_svdsu   s    


r@   c           	      C   sR   | \}}}|d d d f }t ||\}}t ||\}}t|| t|| d S r   )r   Zlobpcgr   )	r   r   r   r!   Xr7   r8   r9   r:   r   r   r   test_lobpcg   s    

rB   c                 C   s  | \}}}t jt|d}tt||}t||}t|t j	sJt
t|| tt||}tj||dd}t|t j	st
t|| tt||}t||}t|t j	st
t|| tt|t|}t||}t|t|st
t| |  d S )Nr1   T)Zuse_umfpack)r   r   r   lenr   Zspsolvesp
csc_matrixr   r    r   r   typetoarray)r   r   r   r   b2r+   r!   r   r   r   test_spsolve   s(    



rI   c                 C   s   | \}}}t |}t|}t|}t|j|s4tt|j|sDt|t	t
||jt
|ff}|t	t
|t
||jff}|j|j |j |j }	t|	 |  || }
t|
t
|dd d S )Ng|=r   )rC   rF   r   Zsplur   Lr   UrD   rE   r   r,   Zperm_rZarangeZperm_cr   r   rG   solveeye)r   r   r   r   nr   luZPrZPcA2zr   r   r   	test_splu   s    

$$rR   c                 C   sf   | \}}}t |}t|}t|j|s,tt|j|s<t|| }t	|t
t|dd d S )NgMbP?r   )rF   r   Zspilur   rJ   r   rK   rL   rG   r   r   rM   rC   )r   r   r   r   r   rO   rQ   r   r   r   
test_spilu   s    

rS   c                 C   s2   | \}}}t |}t||}t|| | d S r   )r   Ztrilr   Zspsolve_triangularr   )r   r   r   r   r!   r   r   r   test_spsolve_triangular   s    

rT   c                 C   s,   | \}}}t |}t |}t|| d S r   )r   Z
onenormestr   )r   r   r   r   Zest0Zestr   r   r   test_onenormest   s    


rU   c                 C   s:   | \}}}t t|}t |}t| |  d S r   )r   invrD   rE   r   rG   r   r   r   r   r+   r!   r   r   r   test_inv   s    

rX   c                 C   s:   | \}}}t t|}t |}t| |  d S r   )r   ZexpmrD   rE   r   rG   rW   r   r   r   	test_expm   s    

rY   c                 C   s0   | \}}}t ||}t ||}t|| d S r   )r   Zexpm_multiplyr   rW   r   r   r   test_expm_multiply   s    
rZ   c                 C   s   | \}}||k  std S r   )allr   r   Z	sp_sparseZ	pd_sparser   r   r   test_eq   s    r]   c                 C   s   | \}}||k  rtd S r   )anyr   r\   r   r   r   test_ne   s    r_   )1Zpytestnumpyr   Zscipy.sparser   rD   Zscipy.sparse.linalgZlinalgr   Znumpy.testingr   r   	ExceptionmarkZskipifZ
pytestmarkmsgr	   ZxfailZsparse_paramsZ
bsr_matrixZ
csr_matrixZ
coo_matrixrE   Z
dia_matrixZ
dok_matrixZscipy_sparse_classesZfixturer   r   r   r   r#   r'   r.   r/   r;   r@   rB   rI   rR   rS   rT   rU   rX   rY   rZ   r]   r_   r   r   r   r   <module>   s^   







	
