3
Od                 @   sD  d Z ddlmZmZmZmZ ddlZddlmZ ddl	Z
ddl	mZmZmZ ddlm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mZ eeddddddgddddddgddddddgddddddgddddddgddddddggZeddddddgZdgZdd Zeeejej dZ!dd Z"G dd de#Z$dS )z*Tests for the linalg.isolve.lgmres module
    )assert_assert_allcloseassert_equalsuppress_warningsN)python_implementation)zerosarrayallclose)norm)
csr_matrixeyerand)LinearOperator)splu)lgmresgmres      	               c             C   s   t d  d7  < t|  S )Nr   r   )countAm)v r   `/var/www/html/virt/lib64/python3.6/site-packages/scipy/sparse/linalg/isolve/tests/test_lgmres.pymatvec   s    r   )r   shapedtypec              K   s   dt d< t :}|jtd tttfttjd ddd| \}}W d Q R X t d }t	t
t| tdddtt| t  ||fS )Nr   z.*called without specifying.*r   g+=)x0inner_mtolg-q=)rtolatol)r   r   filterDeprecationWarningr   Abr   r   r   r	   r
   )kwsupr!   flagcount_0r   r   r   do_solve&   s    &r.   c               @   sb   e Zd Zdd Zdd Zejje dkdddd	 Z	d
d Z
dd Zdd Zdd Zdd ZdS )
TestLGMRESc             C   sj   t tj }t|jtjtjd}t \}}t|d\}}t	|dk t	||d k  t	t
||dd d S )N)r   r   r    )Mr   r   g+=)r$   )r   r   Ztocscr   solver(   r   r    r.   r   r	   )selfZpcr0   r!   r-   x1count_1r   r   r   test_preconditioner2   s    
zTestLGMRES.test_preconditionerc             C   s  g }t d|d\}}tt|dk tt|dk t d|dd\}}t|dk| t||d k  tt||dd g }t d|d	d
\}}ttdd |D j  tt|dk tt|dk t d|dd\}}t|dk| t||d k  tt||dd d S )Nr   )outer_kouter_vr   T)r6   r7   Zprepend_outer_vr   g+=)r$   F)r6   r7   Zstore_outer_Avc             S   s   g | ]}|d  dkqS )r   Nr   ).0r   r   r   r   
<listcomp>Q   s    z+TestLGMRES.test_outer_v.<locals>.<listcomp>r   )r.   r   lenr	   r   all)r2   r7   r!   r-   r3   r4   r   r   r   test_outer_v>   s(    zTestLGMRES.test_outer_vPyPyz Fails on PyPy CI runs. See #9507)reasonc             C   s   t jjd tdtdddd }t jjd}t R}|jtd t||t|j	d ddd	\}}t
||t|j	d ddd
\}}W d Q R X t|d t|d tt jj|j|| dk t|| d S )Ni  i  gMb@?)Zdensityz.*called without specifying.*r      r   )r!   r"   maxiter)r!   Zrestartr@   g-C6:?)nprandomr   r   r   r&   r'   r   r   r   r   r   r   linalgr
   dotr   )r2   r(   r)   r+   r!   Zflag0r3   Zflag1r   r   r   test_arnoldi[   s    

zTestLGMRES.test_arnoldic             C   s4  t jjd x dD ]}dt| }t }|jtd t j|}t||dd\}}t	|d	 t
|j|| d	d
d t||d	dd\}}|d	krt
|j|| d	d
d t jj|}t||dd\}}t	|d	 t
|j|| d	d
d t||d	dd\}}|d	kr"t
|j|| d	d
d W d Q R X qW d S )Ni  r   r   
   d   r   z.*called without specifying.*)r@   r   g+=)r%   )r#   r@   )r   r   rF   rG   )rA   rB   seedr   r   r&   r'   onesr   r   r   rD   r   )r2   nr(   r+   r)   xinfor   r   r   test_cornercaseq   s&    



zTestLGMRES.test_cornercasec             C   s`   t ddd}tj|d	< tjd}t 0}|jtd t||ddd\}}t|d W d Q R X d S )
Nr   Zlil)formatr   z.*called without specifying.*r   rF   )r#   r@   )r   r   )	r   rA   nanrI   r   r&   r'   r   r   )r2   r(   r)   r+   rK   rL   r   r   r   	test_nans   s    

zTestLGMRES.test_nansc             C   s   t jddgddggtd}t jddg}t jj||}t jddg}t 2}|jtd t|||d f|d fgdd\}}W d Q R X t	||d	d
 d S )Nr   r   r   r   )r    r   z.*called without specifying.*)r7   r@   g-q=)r%   )
rA   r   floatrC   r1   r   r&   r'   r   r   )r2   r(   r)   rK   Zv0r+   xprL   r   r   r   test_breakdown_with_outer_v   s    *z&TestLGMRES.test_breakdown_with_outer_vc             C   sZ  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}t jddddgt jddddgt jddddgt jddddgg}x|D ]}t $}|jtd t||dd\}}W d Q R X t jj|j	|| }t j
||j	||j	|j	||j	|j	|j	|f }t jj|j	||dd\}	}
}
}
|j	|	}t jj|j	|| }t||t|d qW d S )	Nr   r   )r    z.*called without specifying.*)r@   )Zrcond)err_msg)rA   r   rQ   r   r&   r'   r   rC   r
   rD   Zc_Zlstsqr   repr)r2   r(   bsr)   r+   rR   rL   respKy_rK   resr   r   r   test_breakdown_underdetermined   s$    


6 
z)TestLGMRES.test_breakdown_underdeterminedc          
   C   s   t jddgddggtd}|dt jdd 9 }t jddg}t  }|jtd t||\}}W d Q R X |dkrt|j	|| d S )	Nr   r   r   r   )r    rG   r   z.*called without specifying.*)
rA   r   rQ   Z	nextafterr   r&   r'   r   r   rD   )r2   r(   r)   r+   rR   rL   r   r   r   test_denormals   s    zTestLGMRES.test_denormalsN)__name__
__module____qualname__r5   r<   pytestmarkZskipifr   rE   rM   rP   rS   r]   r^   r   r   r   r   r/   1   s   
r/   rd   rd   rd   rd   rd   )%__doc__Znumpy.testingr   r   r   r   rb   platformr   ZnumpyrA   r   r   r	   Zscipy.linalgr
   Zscipy.sparser   r   r   Zscipy.sparse.linalg.interfacer   Zscipy.sparse.linalgr   Zscipy.sparse.linalg.isolver   r   r   r)   r   r   r   r    r(   r.   objectr/   r   r   r   r   <module>   s,   