3
Od1                 @   s   d Z ddlmZmZmZmZmZmZmZm	Z	 ddl
mZ ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ G d
d dZG dd dZdd Zdd Zedkreddd dS )a  
Copyright (C) 2010 David Fong and Michael Saunders
Distributed under the same license as SciPy

Testing Code for LSMR.

03 Jun 2010: First version release with lsmr.py

David Chin-lung Fong            clfong@stanford.edu
Institute for Computational and Mathematical Engineering
Stanford University

Michael Saunders                saunders@stanford.edu
Systems Optimization Laboratory
Dept of MS&E, Stanford University.

    )arrayarangeeyezerosonessqrt	transposehstack)norm)assert_almost_equalassert_array_almost_equal)
coo_matrix)aslinearoperator)lsmr   )Gbc               @   st   e Z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S )TestLSMRc             C   s   d| _ d| _d S )N
   )nm)self r   ^/var/www/html/virt/lib64/python3.6/site-packages/scipy/sparse/linalg/isolve/tests/test_lsmr.pysetup_method   s    zTestLSMR.setup_methodc             C   s:   t |}|j|}t||d }tt|| ddd d S )Nr      )decimal)r   matvecr   r   r
   )r   AxtrueAfunr   xr   r   r   assertCompatibleSystem#   s    
zTestLSMR.assertCompatibleSystemc             C   s(   t | j}t| jdf}| j|| d S )Nr   )r   r   r   r"   )r   r   r   r   r   r   testIdentityACase1)   s    
zTestLSMR.testIdentityACase1c             C   s(   t | j}t| jdf}| j|| d S )Nr   )r   r   r   r"   )r   r   r   r   r   r   testIdentityACase2.   s    
zTestLSMR.testIdentityACase2c             C   s,   t | j}tt| jdd}| j|| d S )Nr   r   )r   r   r   r   r"   )r   r   r   r   r   r   testIdentityACase33   s    
zTestLSMR.testIdentityACase3c             C   s.   t d| j}tt| jdd}| j|| d S )N   r   r   r%   )lowerBidiagonalMatrixr   r   r   r"   )r   r   r   r   r   r   testBidiagonalA8   s    zTestLSMR.testBidiagonalAc             C   s<   t ddgg}d}t||d }tt|j|| d d S )Ng      ?g       @g      @r   )r   r   r   r
   dot)r   r   r   r!   r   r   r   testScalarB=   s    zTestLSMR.testScalarBc             C   s0   t | j}tt| jddd }| j|| d S )Nr   r   y              ?r%   y      ?      ?)r   r   r   r   r"   )r   r   r   r   r   r   testComplexXC   s    
zTestLSMR.testComplexXc             C   sx   dt | j t| j| jf }tt| jdd}t|j|}t| jtd}t	|||dd }t
t|| ddd d S )	N   r   r   )dtype)x0r   )r   r%   )r   r   r   r   r   r   r   r   complexr   r   r
   )r   r   r   r   r/   r!   r   r   r   testComplexX0H   s    zTestLSMR.testComplexX0c             C   sJ   dt | j dt| j| jf  }tt| jddjt}| j|| d S )Nr-   y              ?r   r   r%   )r   r   r   r   r   Zastyper0   r"   )r   r   r   r   r   r   testComplexAP   s    "zTestLSMR.testComplexAc             C   sj   dt | j t| j| jf }tt| jddd }t|j|}t||d }tt	|| ddd d S )	Nr-   r   r   y              ?r   )r   r%   y      ?      ?)
r   r   r   r   r   r   r   r   r   r
   )r   r   r   r   r!   r   r   r   testComplexBU   s
    zTestLSMR.testComplexBc             C   sF   t | j}t| jdf}t||d }tt|j||j  d d S )Nr   r   )r   r   r   r   r   r
   r*   Zravel)r   r   r   r!   r   r   r   testColumnB\   s    
zTestLSMR.testColumnBc             C   sf   t ttd }ttj}t tt|dd }t|| t ttddd }t tt|dd }t|| d S )Nr   )r/   r   )maxiter)r   r   r   r   shaper   )r   Zx_refr/   r!   r   r   r   testInitializationb   s    

zTestLSMR.testInitializationN)__name__
__module____qualname__r   r"   r#   r$   r&   r)   r+   r,   r1   r2   r3   r4   r7   r   r   r   r   r      s   r   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestLSMRReturnsc             C   sX   d| _ td| j | _tt| j dd| _t| j| _| jj| j| _	t
| j| j	| _d S )Nr   r'   r   r   r%   )r   r(   r   r   r   r   r   r    r   r   r   returnValues)r   r   r   r   r   o   s    zTestLSMRReturns.setup_methodc       	      C   s6   | j \}}}}}}}}t|t| j| jj|  d S )N)r<   r   r
   r   r    r   )	r   r!   istopitnnormrnormarnormAcondAnormxr   r   r   	testNormrw   s    zTestLSMRReturns.testNormrc       	      C   s>   | j \}}}}}}}}t|t| jj| j| jj|  d S )N)r<   r   r
   r    Zrmatvecr   r   )	r   r!   r=   r>   r?   r@   rA   rB   rC   r   r   r   
testNormar{   s    zTestLSMRReturns.testNormarc       	      C   s(   | j \}}}}}}}}t|t| d S )N)r<   r   r
   )	r   r!   r=   r>   r?   r@   rA   rB   rC   r   r   r   	testNormx   s    zTestLSMRReturns.testNormxN)r8   r9   r:   r   rD   rE   rF   r   r   r   r   r;   n   s   r;   c             C   s  | |krt t| tdtd| tdf}t t| tdt| d tdf}t td| d tdtd| tdf}t|||ff| |fdS t t|tdtd|d tdf}t t|tdt|tdf}t td|d tdtd|d tdf}t|||ff| |fdS d S )N)r.   r   )r6   )r	   r   intfloatr   )r   r   rowcoldatar   r   r   r(      s    r(   c          	   C   sP  t | |}t|ddtd}t|}|j|}d}d}d}	d| }
d}t||||||	|
|\}}}}}}}}t|d}t|d d}td	 td
 dd |d| D }tdj	| td	 td dd ||d d D }tdj	| ||j| }t
t|d |t| d  }td	 d| }d| }t| t| td	 dS )zVerbose testing of lsmrr   r   )r.   gHz>g    _Br   r   r-    zFirst elements of x:c             S   s   g | ]}d | qS )z%10.4fr   ).0xir   r   r   
<listcomp>   s    zlsmrtest.<locals>.<listcomp> zLast  elements of x:c             S   s   g | ]}d | qS )z%10.4fr   )rM   rN   r   r   r   rO      s    N   znormr (est.)  %17.10eznormr (true)  %17.10er%   )r(   r   rH   r   r   r   minmaxprintjoinr   r
   )r   r   Zdampr   r   r    r   ZatolZbtolZconlimZitnlimshowr!   r=   r>   r?   r@   ZnormaZcondarC   Zj1Zj2strrZr2Zstr2r   r   r   lsmrtest   s8    

&
 rY   __main__r'   r   N)__doc__Znumpyr   r   r   r   r   r   r   r	   Znumpy.linalgr
   Znumpy.testingr   r   Zscipy.sparser   Zscipy.sparse.linalg.interfacer   Zscipy.sparse.linalgr   Z	test_lsqrr   r   r   r;   r(   rY   r8   r   r   r   r   <module>   s   (P'