o
    5ήc                     @   sP  d dl Zd dlmZmZmZ d dlZd dlZd dl	Zd dl	m
Z
 d dlmZ dZeeZejjZejjZedD ]!ZeedZeej Zeeej d 7 Zeeedeed 7 Zq9eedZd	Zd
ZdZdZdZdd Zdd Zdd Z dd Z!dd Z"e#dkr&ej$eeZ%e Z&e
eeeeeedZ'e'd  Z(e'd Z)e'd Z*e'd Z+e'd Z,e-eej Z.e.dkrdZ/ndZ/e0d  e0d!e/  e0d"ee+f  e0d#e e&   e0d$e,e)e*f  e0d% e0d&ee(eee( e eejee( e  f  e0d' e0d(ee%eee% e f  e0d) e0d*ee%e(   e0d) dS dS )+    N)assert_allcloseassert_array_equalassert_equal)lsqr)time#      )sizeg      ?g|=g|=g:0yU>Fc               	   C   s   t  } ttt ttttd^}}t| t  tj	
tt }t||ttd d}ttt |ttttd^}}tjt|ttjd  f }tjt ttjd f }tj	j||d d^}}t||ttd d S )Nshowatolbtoliter_lim)r   rtolg      ?)dampr   r   r   r      )rcond)bcopyr   Gr   tolmaxitr   nplinalgsolver   	atol_test	rtol_testr_eyeshapezeroslstsq)b_copyxo_svxr   Gextbext r(   R/tmp/pip-target-vg8gfxp4/lib/python/scipy/sparse/linalg/_isolve/tests/test_lsqr.pytest_lsqr_basic!   s   

r*   c                  C   s\   t ddg} t ddg}t ddg}tjj|| |ffdd}t dg}t|| d S )Nr   r   )r      )r      )r   arrayscipysparse
coo_matrixasarrayr   )rowcolvalAr   r(   r(   r)   test_gh_24667   s   r7   c            
      C   s   d} t j| | }| }tjddS tdD ]E}tj|d }|	| }d||dk< ||d d tj
f  }t||td}t|d d |d }t|| tj|| }	t||	 qW d    d S 1 siw   Y  d S )	N
   raise)invalid   gh㈵>r   )r   r   )r/   r0   r   toarrayr   errstaterangerandomRandomStaterandnewaxisr   r   r   r   r   r   ravel)
nA_sparseA_denseseedrngbetar   outputsolutionreference_solutionr(   r(   r)   test_well_conditioned_problems@   s"   

"rM   c                  C   s   t ddgg} d}t| |d }t| || tdks!J t d} t d}t| |d }t| ||	  tdksDJ d S )Ng      ?g       @g      @r   r8   )r8   r   )
r   r.   r   normdotpytestapproxr   onesrC   )r6   r   xr(   r(   r)   test_b_shapes^   s    

(rT   c               	   C   s   t  } ttt ttttd}t|d j	}ttt tttt|d}t
| t  t|d |d  ttt tttddd }ttt tttt|d}t|d |d  t
| t  d S )Nr
   r   )r   r   r   r   x0r   )r   r   r   r   r   r   r   r   r    r   r   r   )r"   x_refrU   rS   r(   r(   r)   test_initializationl   s   
rW   __main__r
         r,      g+=NoYesLSQRzIs linear operator symmetric? zn: %3g  iterations:   %3gzNorms computed in %.2fs by LSQRz* ||x||  %9.4e  ||r|| %9.4e  ||Ar||  %9.4e z!Residual norms computed directly:z) ||x||  %9.4e  ||r|| %9.4e  ||Ar||  %9.4ezDirect solution norms:z ||x||  %9.4e  ||r|| %9.4e  z" || x_{direct} - x_{LSQR}|| %9.4e )1numpyr   numpy.testingr   r   r   rP   scipy.sparser/   scipy.sparse.linalgr   r   rD   r   r   r?   normalr   rN   r>   jjggThhr   r   r   r   r   r   r*   r7   rM   rT   rW   __name__r   r%   ticXr#   phiopsiokchioamaxmgsymprintr(   r(   r(   r)   <module>   sp    



	

 