
    xf                     P   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g dg dg dg dg dg dg            Z eg d      ZdgZd Z eeej>                  ej@                        Z!d Z" G d d      Z#y)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)   r   r   r   	   )r   r   r   r      r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r      r   r   r   r   )r   r   r   r   r   r   )r      r      r      c                 6    t         dxx   dz  cc<   t        | z  S )Nr   r   )countAm)vs    O/usr/lib/python3/dist-packages/scipy/sparse/linalg/_isolve/tests/test_lgmres.pymatvecr       s    	!HMHa4K    r    shapedtypec                  z   dt         d<   t               5 }|j                  t        d       t	        t
        t        ft        t
        j                  d         ddd| \  }}d d d        t         d   }t        t        t
        z  t        dd      t        t
        |z  t        z
               ||fS # 1 sw Y   QxY w)Nr   .*called without specifying.*r   +=)x0inner_mtol-q=)rtolatol)r   r   filterDeprecationWarningr   Abr   r#   r   r
   r   )kwsupr(   flagcount_0s        r   do_solver6   &   s    E!H		 6

%'FG!Q 65#4"#6246D6 AhGHQrT15u5tAbDF|Dw;6 6s   AB11B:c                       e Zd Zd Zd Zej                  j                   e       dk(  d      d        Z	d Z
d Zd	 Zd
 Zd Zy)
TestLGMRESc                 J   t        t        j                               }t        |j                  t
        j                  t
        j                        }t               \  }}t        |      \  }}t        |dk(         t        ||dz  k         t        t        ||d             y )Nr"   )Mr   r   r'   r,   )r   r   tocscr   solver0   r#   r$   r6   r   r
   )selfpcr:   r(   r5   x1count_1s          r   test_preconditionerzTestLGMRES.test_preconditioner2   sr    "((*"((!''IjGmG1'!)#$Re,-r!   c           	         g }t        d|      \  }}t        t        |      dkD         t        t        |      dk         t        d|d      \  }}t        |dk(  |       t        ||dz  k         t        t        ||d             g }t        d|d	
      \  }}t        t	        |D cg c]	  }|d   d u  c}      j                                t        t        |      dkD         t        t        |      dk         t        d|d      \  }}t        |dk(  |       t        ||dz  k         t        t        ||d             y c c}w )Nr   )outer_kouter_vr   T)rD   rE   prepend_outer_vr   r'   r;   F)rD   rE   store_outer_Avr   r   )r6   r   lenr
   r	   all)r>   rE   r(   r5   r@   rA   r   s          r   test_outer_vzTestLGMRES.test_outer_v>   s1    q':GGq !G!"q'/35G1g&'!)#$Re,- q'.35GW5qtt|56::<=Gq !G!"q'/35G1g&'!)#$Re,- 6s   *EPyPyz Fails on PyPy CI runs. See #9507)reasonc           	         t         j                  j                  d       t        d      t	        ddd      z   }t         j                  j	                  d      }t               5 }|j                  t        d       t        ||t        |j                  d         dd	      \  }}t        ||t        |j                  d         dd
      \  }}d d d        t        d       t        d       t         j                  j                  |j                        |z
        }t!        |dkD         t#        |       y # 1 sw Y   mxY w)N  i  gMb@?)densityr&   r      r   )r(   r)   maxiter)r(   restartrQ   g-C6?)nprandomseedr   r   r   r.   r/   r   r   r#   r   r   linalgr   dotr   r   )	r>   r0   r1   r3   r(   flag0r@   flag1r   s	            r   test_arnoldizTestLGMRES.test_arnoldi[   s    			tIT466IINN4    	5CJJ)+JKq!aggaj(9')16IBauQWWQZ'8&(!5IB		5 	UAUAyy~~aeeBi!m,tB	5 	5s   #A)D88Ec                    t         j                  j                  d       dD ]V  }dt        |      z  }t	               5 }|j                  t        d       t        j                  |      }t        ||d      \  }}t        |d       t        |j                  |      |z
  dd	       t        ||dd
      \  }}|dk(  r t        |j                  |      |z
  dd	       t         j                  j                  |      }t        ||d      \  }}t        |d       t        |j                  |      |z
  dd	       t        ||dd
      \  }}|dk(  r t        |j                  |      |z
  dd	       d d d        Y y # 1 sw Y   exY w)NrN   )r   r   
   d   r   r&   r\   rQ   r   r'   r-   r*   rQ   )rS   rT   rU   r   r   r.   r/   onesr   r   r   rW   r   )r>   nr0   r3   r1   xinfos          r   test_cornercasezTestLGMRES.test_cornercaseq   sV   
		t ! 	AA#a&A"$ A

-/NOGGAJ Ar24T1%a1ae< A1b9419#AEE!HqL!%@IINN1% Ar24T1%a1ae< A1b9419#AEE!HqL!%@'A A	AA As   D3E==F	c                    t        dd      }t        j                  |d<   t        j                  d      }t	               5 }|j                  t        d       t        ||dd      \  }}t        |d	       d d d        y # 1 sw Y   y xY w)
Nr   lil)format)r   r   r&   r   r\   r`   r   )	r   rS   nanra   r   r.   r/   r   r   )r>   r0   r1   r3   rc   rd   s         r   	test_nanszTestLGMRES.test_nans   ss    % &&$GGAJ  	"CJJ)+JKQq"5GAtq!	" 	" 	"s    5A>>Bc                    t        j                  ddgddggt              }t        j                  ddg      }t         j                  j	                  ||      }t        j                  ddg      }t               5 }|j                  t        d       t        |||d f|d fgd      \  }}d d d        t        |d	
       y # 1 sw Y   xY w)Nr   r   r   r   r$   r   r&   )rE   rQ   r+   r_   )
rS   r	   floatrV   r=   r   r.   r/   r   r   )r>   r0   r1   rc   v0r3   xprd   s           r   test_breakdown_with_outer_vz&TestLGMRES.test_breakdown_with_outer_v   s    HHq!fq!f%U3HHaVIIOOAq!XXq!f   	PCJJ)+JKab$Z!T,CQOHB	P 	AE*		P 	Ps   :/C  C	c                    t        j                  g dg dg dg dgt              }t        j                  g d      t        j                  g d      t        j                  g d      t        j                  g d	      g}|D ]n  }t               5 }|j	                  t
        d
       t        ||d      \  }}d d d        t         j                  j                  |j                        |z
        }t         j                  ||j                  |      |j                  |j                  |            |j                  |j                  |j                  |                  f   }t         j                  j                  |j                  |      |d      \  }	}
}
}
|j                  |	      }t         j                  j                  |j                  |      |z
        }t        ||t        |             q y # 1 sw Y   ?xY w)N)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   rl   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r&   r   r^   )rcond)err_msg)rS   r	   rm   r   r.   r/   r   rV   r   rW   c_lstsqr   repr)r>   r0   bsr1   r3   ro   rd   respKy_rc   ress                r   test_breakdown_underdeterminedz)TestLGMRES.test_breakdown_underdetermined   s{    HHl"""$ ,12 HH\"HH\"HH\"HH\"	
  	8A"$ 3

-/NO!!Q2D3 99>>!%%)a-0Daq155q?AEE!%%a/4JJKAq1B?JAq!QaA))..qA.CD#tAw7	83 3s   (G77H	c                 v   t        j                  ddgddggt              }|dt        j                  dd      z  z  }t        j                  ddg      }t	               5 }|j                  t        d       t        ||      \  }}d d d        dk(  rt        |j                        |       y y # 1 sw Y   +xY w)	Nr   r   r   r   rl   r]   r   r&   )
rS   r	   rm   	nextafterr   r.   r/   r   r   rW   )r>   r0   r1   r3   ro   rd   s         r   test_denormalszTestLGMRES.test_denormals   s     HHq!fq!f%U3	S2<<1%%%HHaV  	$CJJ)+JKa|HB	$ 19AEE"Iq) 		$ 	$s   &B//B8N)__name__
__module____qualname__rB   rJ   pytestmarkskipifr   rZ   re   rj   rp   r~   r    r!   r   r8   r8   1   s^    
..: [[-/69A  C C (A>"+88*r!   r8   )$__doc__numpy.testingr   r   r   r   r   platformr   numpyrS   r   r	   r
   scipy.linalgr   scipy.sparser   r   r   scipy.sparse.linalg._interfacer   scipy.sparse.linalgr   scipy.sparse.linalg._isolver   r   r   r1   r   r    r#   r$   r0   r6   r8   r   r!   r   <module>r      s   . .  *  ( (  . . 9 $ 5 ******, - . 

	

 &Ab* b*r!   