o
    i                     @   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y0   dZY nw e jjedu 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 Z0d4d5 Z1dS )6    N)assert_allcloseassert_equalzpydata/sparse not installed)reasonz>pydata/sparse (0.15.1) does not implement necessary operationsZCOOZDOK)Zmarks)paramsc                 C   s   t t| jS N)getattrsparseparamrequest r   f/home/kim/smarthome/.venv/lib/python3.10/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J t|tjsJ t|| | d S )NgV瞯<Zatolr   )splinZgmres
isinstancer   ndarrayr   )r   r   r   r   xinfor   r   r   test_isolve_gmres=   s
   
r"   c                 C   <   | \}}}t ||}t ||}t|d |d dd d S )Nr   MbP?r   )r   lsmrr   r   r   r   r   Zres0resr   r   r   	test_lsmrG      
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   &r0   c                 C   r#   )Nr   gh㈵>r   )r   Zlsqrr   r&   r   r   r   	test_lsqrT   r)   r1   c                 C   s   | \}}}t |d }||}tj|d|d\}}tj|d|d\}}	t|| t|	| ||fD ]B}
tj||d|d\}}tj||
d|d\}}	t|| t|	| tj||d|d\}}tj||
d|d\}}	t|| t|	| q3d S )N      kv0)Mr5   r6   )r   Zdiag	__class__r   Zeigsr   Zeigsh)r   r   r   r6   ZM_denseZM_sparsew_densev_densewvr7   r   r   r   	test_eigs[   s"   






r=   c           
      C   sp   | \}}}t j|d|d\}}}t j|d|d\}}}	t|| tt|t| tt|	t| d S )Nr2   r4   )r   Zsvdsr   r   abs)
r   r   r   r6   Zu0s0Zvt0usvtr   r   r   	test_svdsu   s   

rC   c           	      C   sR   | \}}}|d d d f }t ||\}}t ||\}}t|| t|| d S r   )r   Zlobpcgr   )	r   r   r   r    Xr9   r:   r;   r<   r   r   r   test_lobpcg   s   

rE   c                 C   s  | \}}}t jt|d}tt||}t||}t|t j	s%J t
|| tt||}tj||dd}t|t j	sCJ t
|| tt||}t||}t|t j	s_J t
|| tt|t|}t||}t|t|sJ t
| |  d S )Nr3   T)Zuse_umfpack)r   r   r   lenr   Zspsolvesp	csc_arrayr   r   r   typetodense)r   r   r   r   b2r-   r    r   r   r   test_spsolve   s(   



rL   c                 C   s   | \}}}t |}t|}t|}t|j|sJ t|j|s"J 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   )rF   rI   r   Zsplur   LUrG   rH   r   r.   Zperm_rZarangeZperm_cZfrom_scipy_sparser   r   rJ   solveeye)r   r   r   r   nr   luZ	_Pr_scipyZ	_Pc_scipyZPrZPcA2zr   r   r   	test_splu   s   

  

rU   c                 C   sf   | \}}}t |}t|}t|j|sJ t|j|sJ || }t|t	
t|dd d S )Nr$   r   )rI   r   Zspilur   rM   rN   rO   rJ   r   r   rP   rF   )r   r   r   r   r   rR   rT   r   r   r   
test_spilu   s   

rV   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   

rW   c                 C   s,   | \}}}t |}t |}t|| d S r   )r   Z
onenormestr   )r   r   r   r   Zest0Zestr   r   r   test_onenormest   s   


rX   c                 C   s2   | \}}}t t|}t |}t|| d S r   )r   normrG   	csr_arrayr   )r   r   r   r   Znorm0rY   r   r   r   	test_norm   s   

r[   c                 C   :   | \}}}t t|}t |}t| |  d S r   )r   invrG   rH   r   rJ   r   r   r   r   r-   r    r   r   r   test_inv      

r_   c                 C   r\   r   )r   ZexpmrG   rH   r   rJ   r^   r   r   r   	test_expm   r`   ra   c                 C   sV   | \}}}t ||}t ||}t|| t ||}t ||}t| | d S r   )r   Zexpm_multiplyr   rJ   r^   r   r   r   test_expm_multiply   s   

rb   c                 C   s.   | \}}t ||j}||k sJ d S r   )rG   
coo_matrixasformatformatallr   Z	sp_sparseZ	pd_sparser   r   r   test_eq      rh   c                 C   s.   | \}}t ||j}||k rJ d S r   )rG   rc   rd   re   anyrg   r   r   r   test_ne   ri   rk   )2Zpytestnumpyr   Zscipy.sparser   rG   Zscipy.sparse.linalgZlinalgr   Znumpy.testingr   r   	ExceptionmarkZskipifZ
pytestmarkmsgr	   ZxfailZsparse_paramsZ	bsr_arrayrZ   Z	coo_arrayrH   Z	dia_arrayZ	dok_arrayZscipy_sparse_classesZfixturer   r   r   r   r"   r(   r0   r1   r=   rC   rE   rL   rU   rV   rW   rX   r[   r_   ra   rb   rh   rk   r   r   r   r   <module>   sd    






	
