3
Od	                 @   s   d dl Zd dlmZmZmZ d dlmZ d dlm	Z	 d dl
mZ ddlm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S )    N)assert_equalassert_allcloseassert_)minres)norm)raises   )assert_normclosec              C   s8   t jjd t jjdd} | | j } t jjd}| |fS )Ni  
   )nprandomseedrandT)ZmatrixZvector r   `/var/www/html/virt/lib64/python3.6/site-packages/scipy/sparse/linalg/isolve/tests/test_minres.pyget_sample_problem
   s
    
r   c              C   sJ   t  \} }d| d< d|d< t| |\}}t|d t| j||dd d S )Nr   gh㈵>)tol)r   )r   r   r   r	   dot)Abxpinfor   r   r   test_singular   s    

r   c                 sv   t  \} }tjjd tjjd}g   fdd}t| |||d  }g  t| ||d ttj|d  d   d S )Ni90  r
   c                s    j |  d S )N)append)Zxk)tracer   r   trace_iterates$   s    z*test_x0_is_used_by.<locals>.trace_iterates)x0callback)r   r   )r   r   r   r   r   r   r   Zarray_equal)r   r   r   r   Ztrace_with_x0r   )r   r   test_x0_is_used_by   s    
r   c              C   s\   t  \} }d}| |tjd  }t| ||d\}}t||\}}t|d t||dd d S )Ng      ?r
   )shiftr   gh㈵>)Zrtol)r   r   eyer   r   r   )r   r   r    Z	shifted_Ax1Zinfo1Zx2Zinfo2r   r   r   
test_shift.   s    

r#   c              C   sD   t  \} }d| d< d| d< tt t| |dd\}}W dQ R X dS )z;Asymmetric matrix should raise `ValueError` when check=Truer      T)checkN)r   r$   )r$   r   )r   assert_raises
ValueErrorr   )r   r   r   r   r   r   r   test_asymmetric_fail8   s
    

r(   c              C   sv   t jjd d} t jjdd}t j||j}t jjd}t jjd}t|||| dd }t|j|| | k srtd S )	Ni  r
         )r   r   r   igư>)	r   r   r   randnr   r   r   r   AssertionError)r   ar   cxr   r   r   test_minres_non_default_x0A   s    r0   c              C   s   t jjd d} t jjdd}t j||j}t jjd}t jjd}t jjdd}t j||j}t||||| dd }t|j|| | k std S )	Ni90  r
   r)   r*   )Mr   r   r   igư>)	r   r   r   r+   r   r   r   r   r,   )r   r-   r   r.   mr/   r   r   r   "test_minres_precond_non_default_x0L   s    r3   c              C   s~   t jjd d} t jd}t jd}t jd}t jjdd}t j||j}t||||| dd }t	|j|| | k szt
d S )Ni  r
   r)   )r1   r   r   r   igư>)r   r   r   r!   Zonesr+   r   r   r   r   r,   )r   r-   r   r.   r2   r/   r   r   r   test_minres_precond_exact_x0Y   s    


r4   )Znumpyr   Znumpy.testingr   r   r   Zscipy.sparse.linalg.isolver   Zscipy.linalgr   Zpytestr   r&   Ztest_iterativer	   r   r   r   r#   r(   r0   r3   r4   r   r   r   r   <module>   s   
	
	