
    xf                      <   d Z ddlmZmZmZ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j8                  ej:                        Zd Z G d d      Z y)z,Tests for the linalg._isolve.gcrotmk module
    )assert_assert_allcloseassert_equalsuppress_warningsN)zerosarrayallclose)norm)
csr_matrixeyerand)LinearOperator)splu)gcrotmk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    P/usr/lib/python3/dist-packages/scipy/sparse/linalg/_isolve/tests/test_gcrotmk.pymatvecr      s    	!HMHa4K    r   shapedtypec                  x   dt         d<   t               5 }|j                  t        d       t	        t
        t        ft        t
        j                  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.*+=)x0tolg-q=)rtolatol)r   r   filterDeprecationWarningr   Abr   r"   r   r	   r
   )kwsupr'   flagcount_0s        r   do_solver3   $   s    E!H		 H

%'FG1aGE!''!*$55GBGDH AhGHQrT15u5tAbDF|Dw;H Hs   AB00B9c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestGCROTMKc                 F   t        t        j                               }t        |j                  t
        j                  t
        j                        }t               \  }}t        |      \  }}t        |d       t        ||dz  k         t        t        ||d             y )Nr!   )Mr   r   r&   )r)   )r   r   tocscr   solver-   r"   r#   r3   r   r   r	   )selfpcr7   r'   r2   x1count_1s          r   test_preconditionerzTestGCROTMK.test_preconditioner/   sp    "((*"((!''IjGmGWa '!)#$Re,-r    c           	      x   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d      \  }}t        ||t        |j                  d         dd	      \  }}d d d        t        d       t        d       t         j                  j                  |j                        |z
        d
kD  sJ t!        |       y # 1 sw Y   dxY w)Nr   i  gMb@?)densityr%   r      )r'   mkmaxiter)r'   restartrD   MbP?)nprandomseedr   r   r   r+   r,   r   r   r"   r   r   linalgr
   dotr   )r:   r-   r.   r0   r'   flag0r<   flag1s           r   test_arnoldizTestGCROTMK.test_arnoldi;   s    
		qIT466IINN4    	QCJJ)+JK1qwwqz):bAqQIBauQWWQZ'8"aPIB	Q
 	UAUAyy~~aeeBi!m,t333B	Q 	Qs   #A*D00D9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)N  )r   r   
   d   r   r%   rQ   )rD   r   r&   r*   r(   rD   )rG   rH   rI   r   r   r+   r,   onesr   r   r   rK   r   )r:   nr-   r0   r.   xinfos          r   test_cornercasezTestGCROTMK.test_cornercaseM   sV   
		t ! 	AA#a&A"$ A

-/NOGGAJ!!Q34T1%a1ae<!!QAr:419#AEE!HqL!%@IINN1%!!Q34T1%a1ae<!!QAr: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   rQ   rT   r   )	r   rG   nanrU   r   r+   r,   r   r   )r:   r-   r.   r0   rW   rX   s         r   	test_nanszTestGCROTMK.test_nansk   ss    % #GGAJ  	"CJJ)+JKa26GAtq!	" 	" 	"s    5A>>Bc                    t         j                  j                  d       t         j                  j                  dd      t        j                  d      z   }t         j                  j                  d      }dD ]l  }t               5 }|j                  t        d       t        ||dd|dd      \  }}d d d        t        d	       t        |j                        |z
  d	d
       n y # 1 sw Y   8xY w)NrP      )oldestsmallestr%   rQ   g-C6?   )rB   rC   truncater(   rD   r   rF   rS   )rG   rH   rI   r   r   r   r+   r,   r   r   r   rK   )r:   r-   r.   rd   r0   rW   rX   s          r   test_truncatezTestGCROTMK.test_truncateu   s    
		tIINN2r"RVVBZ/IINN2. 	8H"$ /

-/NO!!Q"X4*-/4/ q!AEE!HqL!$7	8/ /s   ,C''C0	c                 p   dD ]  }g }t        ||      \  }}t        t        |      dkD         t        t        |      dk         |r|D ]  \  }}t        |d u         t        ||      \  }}|rt        |dt        |      z          nt        |d       t        ||dz  k         t	        ||d        y )	N)TF)CU	discard_Cr   r   r   r   r&   rS   )r3   r   lenr   r   )	r:   rh   rg   r'   r2   cur<   r=   s	            r   test_CUzTestGCROTMK.test_CU   s    & 	0IB"bI>KBCGaK CGqL! 'DAqAI&' #bI>KBWa#b'k2Wa(Gwqy()B/%	0r    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   )r#   rR   r   r%   )
rG   r   float	nextafterr   r+   r,   r   r   rK   )r:   r-   r.   r0   xprX   s         r   test_denormalszTestGCROTMK.test_denormals   s     HHq!fq!f%U3	S2<<1%%%HHaV  	%CJJ)+JKq!}HB	% 19AEE"Iq) 		% 	%s   &B//B8N)
__name__
__module____qualname__r>   rN   rY   r^   re   rl   rq    r    r   r5   r5   .   s&    
. $A<"80**r    r5   )!__doc__numpy.testingr   r   r   r   numpyrG   r   r   r	   scipy.linalgr
   scipy.sparser   r   r   scipy.sparse.linalg._interfacer   scipy.sparse.linalgr   scipy.sparse.linalg._isolver   r   r   r.   r   r   r"   r#   r-   r3   r5   ru   r    r   <module>r~      s   . .  ( (  . . 9 $ 6 ~%%%%%' ( ) 
-	

 &Aw* w*r    