ó
Ê½÷Xc           @` s  d  Z  d d l m Z m Z m 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 d
 „  ƒ  YZ d d d „  ƒ  YZ d „  Z d „  Z e d k re d d d ƒ e ƒ  n  d S(   s¦  
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.

i    (   t   divisiont   print_functiont   absolute_import(   t   arrayt   aranget   eyet   zerost   onest   sqrtt	   transposet   hstack(   t   norm(   t   run_module_suitet   assert_almost_equal(   t
   coo_matrix(   t   aslinearoperator(   t   lsmrt   TestLSMRc           B` sP   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   c         C` s   d |  _  d |  _ d  S(   Ni
   (   t   nt   m(   t   self(    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyt   setUp   s    	c         C` sO   t  | ƒ } | j | ƒ } t | | ƒ d } t t | | ƒ d d d ƒd  S(   Ni    t   decimali   (   R   t   matvecR   R   R   (   R   t   At   xtruet   Afunt   bt   x(    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyt   assertCompatibleSystem#   s    c         C` s8   t  |  j ƒ } t |  j d f ƒ } |  j | | ƒ d  S(   Ni   (   R   R   R   R   (   R   R   R   (    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyt   testIdentityACase1)   s    c         C` s8   t  |  j ƒ } t |  j d f ƒ } |  j | | ƒ d  S(   Ni   (   R   R   R   R   (   R   R   R   (    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyt   testIdentityACase2.   s    c         C` s>   t  |  j ƒ } t t |  j d d ƒ ƒ } |  j | | ƒ d  S(   Ni    iÿÿÿÿ(   R   R   R	   R   R   (   R   R   R   (    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyt   testIdentityACase33   s    c         C` sA   t  d |  j ƒ } t t |  j d d ƒ ƒ } |  j | | ƒ d  S(   Ni   i    iÿÿÿÿ(   t   lowerBidiagonalMatrixR   R	   R   R   (   R   R   R   (    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyt   testBidiagonalA8   s    c         C` sR   t  d d g g ƒ } d } t | | ƒ d } t t | j | ƒ | ƒ d ƒ d  S(   Ng      ð?g       @g      @i    (   R   R   R   R   t   dot(   R   R   R   R   (    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyt   testScalarB=   s    c         C` sa   t  |  j ƒ } t |  j d f ƒ } t | | ƒ d } t t | j | ƒ | j ƒ  ƒ d ƒ d  S(   Ni   i    (   R   R   R   R   R   R   R#   t   ravel(   R   R   R   R   (    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyt   testColumnBC   s    (
   t   __name__t
   __module__R   R   R   R   R    R"   R$   R&   (    (    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyR      s   							t   TestLSMRReturnsc           B` s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C` s‚   d |  _  t d |  j  ƒ |  _ t t |  j  d d ƒ ƒ |  _ t |  j ƒ |  _ |  j j |  j ƒ |  _	 t
 |  j |  j	 ƒ |  _ d  S(   Ni
   i   i    iÿÿÿÿ(   R   R!   R   R	   R   R   R   R   R   R   R   t   returnValues(   R   (    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyR   K   s    	c   	      C` sK   |  j  \ } } } } } } } } t | t |  j |  j j | ƒ ƒ ƒ d  S(   N(   R*   R   R   R   R   R   (	   R   R   t   istopt   itnt   normrt   normart   normAt   condAt   normx(    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyt	   testNormrS   s    !c   	      C` sW   |  j  \ } } } } } } } } t | t |  j j |  j |  j j | ƒ ƒ ƒ ƒ d  S(   N(   R*   R   R   R   t   rmatvecR   R   (	   R   R   R+   R,   R-   R.   R/   R0   R1   (    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyt
   testNormarW   s    !c   	      C` s8   |  j  \ } } } } } } } } t | t | ƒ ƒ d  S(   N(   R*   R   R   (	   R   R   R+   R,   R-   R.   R/   R0   R1   (    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyt	   testNormx\   s    !(   R'   R(   R   R2   R4   R5   (    (    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyR)   J   s   			c         C` sv  |  | k r½ t  t |  d t ƒt d |  d t ƒf ƒ } t  t |  d t ƒt |  d d t ƒf ƒ } t  t d |  d d t ƒt d |  d t ƒf ƒ } t | | | f f d |  | f ƒSt  t | d t ƒt d | d d t ƒf ƒ } t  t | d t ƒt | d t ƒf ƒ } t  t d | d d t ƒt d | d d t ƒf ƒ } t | | | f f d |  | f ƒSd  S(   Nt   dtypei   t   shape(   R
   R   t   intt   floatR   (   R   R   t   rowt   colt   data(    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyR!   a   s    "c      	   C` sÑ  t  |  | ƒ } t | d d d t ƒ} t | ƒ } | j | ƒ } d } d } d }	 d | }
 d } t | | | | | |	 |
 | ƒ \ } } } } } } } } t | d ƒ } t | d	 d ƒ } t d
 ƒ t d ƒ g  | d | !D] } d | ^ qá } t d j	 | ƒ ƒ t d
 ƒ t d ƒ g  | | d D] } d | ^ q-} t d j	 | ƒ ƒ | | j | ƒ } t
 t | ƒ d | t | ƒ d ƒ } t d
 ƒ d | } d | } t | ƒ t | ƒ t d
 ƒ d S(   s   Verbose testing of lsmri    iÿÿÿÿR6   gH¯¼šò×z>g    _ Bi
   i   i   i   t    s   First elements of x:s   %10.4ft    s   Last  elements of x:i   s   normr (est.)  %17.10es   normr (true)  %17.10eN(   R!   R   R9   R   R   R   t   mint   maxt   printt   joinR   R   (   R   R   t   dampR   R   R   R   t   atolt   btolt   conlimt   itnlimt   showR   R+   R,   R-   R.   t   normat   condaR1   t   j1t   j2t   xit   strt   rt   r2t   str2(    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyt   lsmrtest   s8    
9

$

%(




t   __main__i   i
   N(    (    (   t   __doc__t
   __future__R    R   R   t   numpyR   R   R   R   R   R   R	   R
   t   numpy.linalgR   t   numpy.testingR   R   t   scipy.sparseR   t   scipy.sparse.linalg.interfaceR   t   scipy.sparse.linalgR   R   R)   R!   RR   R'   (    (    (    sI   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/isolve/tests/test_lsmr.pyt   <module>   s   :,		&