
    Phni              
          d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	m
Z
mZ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mZ ddlmZmZmZmZmZmZmZm Z m!Z!m"Z" eeeeeeee e!e"g
Z#d	Z$ ejJ                  e#d
      d        Z& G d d      Z' G d d      Z( G d d      Z) e)       jU                         Z+ ejJ                  e+e+D  cg c]  } | jX                   c} d      d        Z-ej\                  j^                  d        Z0d Z1d Z2ej\                  jg                  d      ej\                  ji                  d e)       jV                  D  cg c]  } | jX                  dv r|  c} ddg      d               Z5d  Z6d! Z7ej\                  jq                  d"#      d$        Z9d% Z:d& Z;ej\                  ji                  d'e#      d(        Z<ej\                  j^                  ej\                  ji                  d e)       jV                        d)               Z=d* Z>ej\                  ji                  d+g d,      d-        Z? G d. d/      Z@ G d0 d1      ZAyc c} w c c} w )2z5 Test functions for the sparse.linalg._isolve module
    N)assert_array_equalassert_allclose)zerosarangearrayoneseyeiscomplexobj)norm)	dia_array	csr_arraykronsum)LinearOperatoraslinearoperator)
bicgbicgstabcgcgsgcrotmkgmreslgmresminresqmrtfqmrz-.*called without specifying `callback_type`.*session)paramsscopec                     | j                   S )z@
    Fixture for all solvers in scipy.sparse.linalg._isolve
    paramrequests    {C:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\scipy/sparse/linalg/_isolve/tests/test_iterative.pysolverr$           
 ==    c                       e Zd ZddZy)CaseNc                     || _         || _        |$t        |j                  d   t              | _        n|| _        |g | _        n|| _        |g | _        y || _        y )Nr   dtype)nameAr   shapefloatbskipnonconvergence)selfr,   r-   r0   r1   r2   s         r#   __init__zCase.__init__)   s[    	9AGGAJe4DFDF<DIDI!"$D"0Dr&   )NNN)__name__
__module____qualname__r4    r&   r#   r(   r(   (   s    1r&   r(   c                       e Zd ZddZd Zy)
SingleTestc                 j    || _         || _        || _        |dz   |j                  z   | _        || _        y )N-)r-   r0   r$   r5   r,   convergence)r3   r-   r0   r$   casenamer=   s         r#   r4   zSingleTest.__init__;   s3    sNV__4	&r&   c                 "    d| j                    dS )N<>)r,   )r3   s    r#   __repr__zSingleTest.__repr__B   s    499+Qr&   N)T)r5   r6   r7   r4   rB   r8   r&   r#   r:   r:   :   s    ' r&   r:   c                       e Zd Zd Zd Zy)IterativeParamsc                    t         t        g}t        g}t         g}g | _        d}t        d|f      }d|dd d f<   d|dd d f<   d|dd d f<   t	        |g df||f      j                         }| j                  j                  t        d	|             | j                  j                  t        d
|j                  d      t         g             | j                  j                  t        d| |             | j                  j                  t        d| j                  d      |t         gz                t        ||      }| j                  j                  t        d|t         g             | j                  j                  t        d|j                  d      t         g             t        g dgd      }t	        |dgfd      j                         }| j                  j                  t        d||             | j                  j                  t        d|j                  d      |             t        j                  j                  d      }	|	j                  dd      }| j                  j                  t        d|||z                | j                  j                  t        d|j                  d      ||z                t        j                  j                  d      }	|	j                  dd      }||j                  z   }| j                  j                  t        d||             | j                  j                  t        d|j                  d      |             t        j                  j!                  d       t        j                  j                  dd      }t        j"                  |j%                         |j                        }| j                  j                  t        d|             | j                  j                  t        d|j                  d      t         g             t        j                  j                  d      }	|	j                  dd      d |	j                  dd      z  z   }||z   |z   }
| j                  j                  t        d!||
             | j                  j                  t        d"|j                  d#      |
             t        j                  j                  d      }	|	j                  dd      d |	j                  dd      z  z   }||j                  j%                         z   }| j                  j                  t        d$|||z                | j                  j                  t        d%|j                  d#      ||z                t        j                  j                  d      }	|	j                  dd      d |	j                  dd      z  z   }t        j"                  |j%                         |j                        }| j                  j                  t        d&||             | j                  j                  t        d'|j                  d#      |             t        d(      }d|dd d f<   d|dd d f<   t	        |ddgfd      j                         }| j                  j                  t        d)||t&        t(        t*        t,        gz                | j                  j                  t        d*|j                  d#      |t&        t(        t*        t,        gz                t        j                  g d+g d,g d-g d.g d/g d0g d1g d2g d3g d4g d5gt.              }t        j                  g d6t.              }||j                  k(  j1                         sJ | j                  j                  t        d7|||t&        t*        t2        t(        t,        g8             y )9N(         r      )r   rI   rJ   r.   	poisson1dzpoisson1d-Ff)r1   zneg-poisson1dzneg-poisson1d-F	poisson2dzpoisson2d-F)
   rH      rI   
      i	   dr*   rR   rR   z	rand-diagzrand-diag-Fi  rS   randzrand-Fzrand-symz
rand-sym-FrU   zrand-sym-pdzrand-sym-pd-Fy              ?z
rand-cmplxzrand-cmplx-FFzrand-cmplx-hermzrand-cmplx-herm-Fzrand-cmplx-sym-pdzrand-cmplx-sym-pd-F)rH   rR   nonsymposdefnonsymposdef-F)r   r   r   r   r   rJ   rI   r   r   r   r   )r   r   r   r   r   rH   r   rI   r   r   r   )r   r   r   r   r   rH   r   r   rI   r   r   )r   r   r   r   r   rH   r   r   r   rI   r   )r   r   r   r   r   rJ   r   r   r   r   rI   )rJ   rH   rH   rH   rJ   r   r   r   r   r   r   )rI   r   r   r   r   r   rI   r   r   r   r   )r   rI   r   r   r   r   r   rI   r   r   r   )r   r   rI   r   r   r   r   r   rI   r   r   )r   r   r   rI   r   r   r   r   r   rI   r   )r   r   r   r   rI   r   r   r   r   r   rI   )r   r   r   r   r   rJ   r   r   r   r   r   	sym-nonpd)r1   r2   )r   r   casesr   r   tocsrappendr(   astyper   r   nprandomRandomStaterX   Tseeddotconjr   r   r   r   r/   allr   )r3   sym_solversposdef_solversreal_solversNdata	Poisson1D	Poisson2DRandDiagrng
skip_cmplxr-   r0   s                r#   r4   zIterativeParams.__init__G   sm   rlx 
 QF|QT
QT
QT
tZ0A?EEG	

${I67

$}i.>.>s.C%+H. 	/ 	

$
$24 	5 	

$0I:2E2Ec2J$2fX$=? 	@ Iy1	 	

${IVHEF

$}i.>.>s.C%+H. 	/ 9:#FdQC[9??A

${H>JK

$}hooc.B$24 	5 ii##D)xx1~

$vt$2[$@B 	C

$xS)9$2[$@B 	C ii##D)xx1~dff}

$z4nEF

$|T[[-=$24 	5 			tyy~~a#vvdiik466*

$}d34

$C0@%+H. 	/ ii##D)xx1~SXXa^ 33#k1L@


$|T
CD

$~t{{3/?$.0 	1 ii##D)xx1~SXXa^ 33dffkkm#

$0$$2\$AC 	D

$2DKK4D$2\$AC 	D ii##D)xx1~SXXa^ 33vvdiik466*

$2D|LM

$4dkk#6F$02 	3 G}QT
QT
taWoX6<<>

$~q$/3T52I$IK 	L

$/#$/3T52I$IK 	L HH<<<<<<=====
? GL
M HH6eDQSS~~

${Aq$2/2D(C.O! 	r&   c           
      B   g }| j                   D ]  }t        D ]  }||j                  v r||j                  v r3|t	        |j
                  |j                  ||j                  d      gz  }S|t	        |j
                  |j                  ||j                        gz  }  |S )NF)r=   )r]   _SOLVERSr1   r2   r:   r-   r0   r,   )r3   testscaser$   s       r#   generate_testszIterativeParams.generate_tests   s    JJD"dii'T000j5:< = =E jKLLE #  r&   N)r5   r6   r7   r4   rw   r8   r&   r#   rD   rD   F   s    ||r&   rD   module)r   idsr   c                     | j                   S )z2
    Fixture for all cases in IterativeParams
    r   r!   s    r#   rv   rv      r%   r&   c           	           j                   st        j                  d        j                  }d} j                  dz  }g  fd} j
                  t        k(  rCt        j                  t        t              5   j                  |||d|      \  }}d d d        n j                  |||d|      \  }}t              dk(  sJ dk(  sJ y # 1 sw Y   !xY w)N$Solver - Breakdown case, see gh-8829g-q=r   c                     | j                   dk(  r+j                  t        j                  | z  z
               y j                  t        j                  | z  z
               y )Nr   )ndimr_   r   r-   )xr0   rv   	residualss    r#   callbackztest_maxiter.<locals>.callback   sL    66Q;T!dffqj.12T!dffqj.12r&   )matchrJ   x0rtolmaxiterr   )r=   pytestr1   r-   r0   r$   r   warnsDeprecationWarningCB_TYPE_FILTERlen)	rv   r-   r   r   r   r   infor0   r   s	   `      @@r#   test_maxiterr      s    :;ADA	
QBI3 {{e\\,NCkk!Q2D!hkWGAt DC ++ara(+S4y>Q199 DCs   ?CCc                 ~   | j                   }|j                  j                  dv rd}nd}| j                  }d|z  }| j	                  ||||      \  }}t        |d|z         | j                  r*|dk(  sJ t        ||z  |z
        t        |      |z  k  sJ y |dk7  sJ t        ||z  |z
        t        |      k  sJ y )NdD:0yE>{Gz?r   r   r   )r-   r+   charr0   r$   r   r=   r   )rv   r-   r   r0   r   r   r   s          r#   test_convergencer      s    Aww||tA	
QBkk!Q2Dk1GAtr1q5!qyyAEAI$q'D.000qyyAEAI$q')))r&   c                    | j                   st        j                  d       d}dd}| j                  }|j                  \  }}|j                         }t        j                  |      t        |      k(  rt        d|z  gdgf||f       | j                  }d|z  }t        |j                  ||      }	| j                  t        u r| j                  |||	|	||      \  }
}n| j                  |||	||	      \  }
}|dk(  sJ t        ||
z  |z
        t        |      |z  k  sJ t        |      }||_        ||_        | j                  ||||
      \  }
}|dk(  sJ t        ||
z  |z
        t        |      |z  k  sJ y )Nr|   r   c                     | S )ztrivial preconditionerr8   )r0   whichs     r#   identityz$test_precond_dummy.<locals>.identity  s    r&         ?r   rK   rmatvec)M1M2r   r   Mr   r   r   N)r=   r   r1   r-   r.   diagonalra   count_nonzeror   r   r0   r   r$   r   r   r   psolverpsolve)rv   r   r   r-   r   rl   diagOfAr0   r   precondr   r   s               r#   test_precond_dummyr     sq   :;D 	A77DAq jjlG	 CL0C'M?QC(A7A	
QBQWWhAG{{c++aw7r+M4++ag"4+@4199A	?d1gn,,,AAHAIkk!Q2Dk1GAt199A	?d1gn,,,r&   rR   rv   )rL   rN   rL   rN   )ry   c                     t         D ]  }| j                  v s|t        u rd}d
 fd	}d
 fd	}dg fd} fd} j                  }d|z  }t	         j
                  j                  ||      }	t	         j
                  j                  ||      }
dg ||	||
||      \  }}|dk(  sJ t         j
                  |z  |z
        t        |      |z  k  sJ d   d	k  rJ  y )Nr   c                     j                   }t        |t        j                        s|j	                         }t        j
                  j                  ||       S zinverse preconditioner)r-   
isinstancera   ndarraytoarraylinalgsolver0   r   r-   rv   s      r#   inversez%test_precond_inverse.<locals>.inverseD  s:    Aa,IIK99??1a((r&   c                     j                   }t        |t        j                        s|j	                         }t        j
                  j                  |j                  |       S r   )r-   r   ra   r   r   r   r   rd   r   s      r#   rinversez&test_precond_inverse.<locals>.rinverseK  s>    Aa,IIK99??133**r&   r   c                 <    dxx   dz  cc<   j                   | z  S Nr   rJ   )r-   r0   rv   matvec_counts    r#   matvecz$test_precond_inverse.<locals>.matvecT  s    Oq O66A:r&   c                 P    dxx   dz  cc<   j                   j                  | z  S r   )r-   rd   r   s    r#   r   z%test_precond_inverse.<locals>.rmatvecX  s#    Oq O6688a<r&   r   r   rG   r   )rt   r1   r   r0   r   r-   r.   r   )rv   r$   r   r   r   r   r   r0   r   r-   r   r   r   r   s   `            @r#   test_precond_inverser   9  s    
 TYY&C-	)	+ s		  FFU466<<A wI sARd;4qyyDFFQJN#tAw~555 A!###Y r&   c           	         | t         t        fv rt        j                  d       t        j
                  j                  d      }|j                  ddg      }||j                  z  dt	        j                  d      z  z   }d|j                  d      z  }t        j                  j                  |      }t        j                  dt	        j                  ddd	      t        j                  f   }|j                  d
      }||j                  z  }d d|z  d|z  g}t!        j"                  |||      D ]  \  }}	}
|	dk(  r|
dk(  r| t$        u r@|*t'        |      }t'        t	        j                  d            }nd } | |||||	|
      \  }}n | ||||	|
      \  }}|dk(  sJ ||z  |z
  }t        j                  j                  |      }|	|z  }|dt)        |
|      z  k  rJ  y )NzTODO: Add atol to minres/tfqmrl   R'd rR   sizeg     @@r   irH   rQ   rW   ư>g    .A)r   r   r   atol)r   r   r   g/$?)r   r   r   r1   ra   rb   default_rnguniformrd   r	   r   r   r_logspaceinfstandard_normal	itertoolsproductr   r   max)r$   rq   r-   r0   b_normtolsM0Msr   r   r   r   r   r   residualerratol2s                    r#   	test_atolr   m  s    &% 45 ))


0C"b"A	ACC"RVVBZ-Ackkrk""AYY^^AF55BKKAq)26612D 
		(		+B	bddB
r	38	$B"**2tT:419S=}$Q'%bffRj1QaBTEGAtQQT=GAtqyyq519iinnX&v gD% 00000) ;r&   c           
         t         j                  j                  d      }|j                  ddg      }||j                  z  dt        j                  d      z  z   }t        j
                  d      }t         j                  t        j                  ddd         }|D ]  } | |||      \  }}|dk(  sJ t        |d	d
        | |||t        d            \  }}|dk(  sJ t        |d	|       | t        us\ | |||dt        d            \  }}|dk(  rt        |d        | ||||      \  }}|dk(  sJ t        |dd        | |||d      \  }}|dk(  sJ t        |dd        y )Nl   Yo/ rR   r   irH   rQ   r   r   g        V瞯<r   )r   r   )r   r   r   r   r   gYn)ra   rb   r   rd   r	   r   r   r   r   r   r   )r$   rq   r-   r0   r   tolr   r   s           r#   test_zero_rhsr     s`   
))

 0
1C

R
!A	ACC"rvvbz/!A
A55S!Q'(DAC(4qyy2E*ACDH54qyy2C(Q!RAGAtqy1%Q#6GAt199Aqv.Q!4GAt199Aqv.) r&   zsee gh-18697reasonc                 R   | t         t        t        fvrt        j                  d       | t        u r,t        j                         dvrt        j                  d       t        j                  g dg dg dg dg      }t        j                  d	      }t        j                  }d
}t        dd      D ]t  } | |||dd      \  }}|dk(  r"t        ||z  |z
        dt        |      z  k  sJ t        j                  j                  ||z  |z
        }t        ||      }|||z  k  rtJ  y )NzSolver breakdown case)	x86_64x86aarch64arm64z,fails on at least ppc64le, ppc64 and riscv64r   )gH|r   r   ghܾΤ?)r   yXq-DT!@r   r   )r   r   yXq-DT!r   )g |?                r   gܾΤĿrS   rU   rJ      r   r   )r   r   r   )r   r   r   r   r1   platformmachinexfailra   r   r   r   ranger   r   min)	r$   r-   v
best_error	slack_tolr   r   r   errors	            r#   test_maxiter_worseningr     s   eVS))+,
 	&&JJJK 	BFFDF 	GA 	
AJ IB<AwTB419A	?dT!Wn444		q1uqy)U+
 	J....  r&   c                    t         j                  j                  d      }d}|j                  ||g      }||j                  z  }|j                  |      }|j                  |      }| t        u rt        d      }nt        dd      } | ||fi |\  }}|dk(  sJ t        ||z  |z
        dt        |      z  k  sJ  | ||fd|i|\  }}|dk(  sJ t        ||z  |z
        d	t        |      z  k  sJ y )
N   p-Qs/ rR   r   r   r   r   r   r   r   g?̔>)ra   rb   r   rd   r   dictr   )	r$   rq   nr-   r0   r   kwr   r   s	            r#   test_x0_workingr     s    
))

 0
1C
A

A
A	ACCA

1A	ABt_qt$Q R GAt199A	?dT!Wn,,,Q'b'B'GAt199A	?fT!Wn,,,r&   c                    | j                   t        u r$| j                  dk(  rt        j                  d       | j                   t
        u rt        j                  d       | j                  }| j                  }d}d}| j                  ||||      \  }}t        |d       |dk(  sJ t        ||z  |z
        |t        |      z  k  sJ y )Nznonsymposdef-bicgstabzISolver fails due to numerical noise on some architectures (see gh-15533).zSolver does not support x0='Mb'Mbr   r   r   )
r$   r   r,   r   r1   r   r-   r0   r   r   )rv   r-   r0   r   r   r   r   s          r#   test_x0_equals_Mbr     s    xdii3J&J < 	={{e56AA	BDkk!Q2Dk1GAtr4 199A	?dT!Wn,,,r&   r$   c                     t        j                  d      }t        j                  ddg      } | |||      \  }}t        ||       |dk(  sJ y )NrH   g      )r   r   )ra   r	   r   r   )r$   matrhssolr   s        r#   test_x0_solves_problem_exactlyr     sK     &&)C
((C:
CsCC(ICC199r&   c                     d }t        | j                  | j                  |d      \  }}|j                         \  }}| j                  dk(  rd}n| j                  dv rd}nd}|j                  |      sJ |dk(  sJ y )	Nc                      y r   r8   r   s    r#   cbztest_show.<locals>.cb   s    r&   T)r   showr\    )rZ   r[   z?TFQMR: Linear solve not converged due to reach MAXIT iterationsz9TFQMR: Linear solve converged due to reach TOL iterations)r   r-   r0   
readouterrr,   
startswith)rv   capsysr   r   r   outr   exps           r#   	test_showr    s}     DFFDFFRd;GAt  "HCyyK	8	8OI>>#"99r&   c                 B   t         j                  j                  d      }d}|j                  ||g      }||j                  z  }|j                  |      }|j                  |      }t	        j
                  t              5   | |||d       d d d        y # 1 sw Y   y xY w)Nr   rR   r   h㈵>)ra   rb   r   rd   r   raises	TypeError)r$   rq   r   r-   r0   r   s         r#   test_positional_errorr	  3  s}    
))

 0
1C
A

A
A	ACCA

1A	AB	y	!q!R 
"	!	!s    BBr   )legacyNrI   c                    | t         k(  rt        j                  d       t        j                  j                  d      }d}|j	                  ||g      }||j                  z  }|j	                  |      }|j	                  |      }t        j                  t              5   | ||||       d d d        y # 1 sw Y   y xY w)Nzminres has no `atol` argumentr   rR   r   r   )	r   r   r1   ra   rb   r   rd   r  
ValueError)r$   r   rq   r   r-   r0   r   s          r#   test_invalid_atolr  ?  s    34
))

 0
1C
A

A
A	ACCA

1A	AB	z	"q!Rd# 
#	"	"s   B44B=c                   N    e Zd Zej                  j                  d      d        Zy)TestQMRz,ignore::scipy.sparse.SparseEfficiencyWarningc                    ddl m} ddlm} d}t	        |      }t        d|z  d|z  | gg df||f      }t        |d	
      }t        | dz  |gddgf||f      }t        d|z  | gddgf||f      } ||       ||      fd}	fd}
fd}fd} |||f|	|      } |||f|
|      }d}t        |||d||      \  }}|dk(  sJ t        ||z  |z
        |t        |      z  k  sJ y)z8Check that QMR works with left and right preconditionersr   )splu)r   d   rS   )rI   r   rJ   rK   rV   r*   rH   rI   rJ   c                 &    j                  |       S r   r   r0   L_solvers    r#   L_solvez/TestQMR.test_leftright_precond.<locals>.L_solvea      >>!$$r&   c                 &    j                  |       S r   r  r0   U_solvers    r#   U_solvez/TestQMR.test_leftright_precond.<locals>.U_solved  r  r&   c                 (    j                  | d      S Nrd   r  r  s    r#   LT_solvez0TestQMR.test_leftright_precond.<locals>.LT_solveg      >>!S))r&   c                 (    j                  | d      S r  r  r  s    r#   UT_solvez0TestQMR.test_leftright_precond.<locals>.UT_solvej  r!  r&   )r   r   r      )r   r   r   r   N)	scipy.sparse.linalg._dsolver  scipy.sparse.linalg._interfacer   r   r   r   r   r   )r3   r  r   r   datr-   r0   LUr  r  r   r#  r   r   r   r   r   r  r  s                     @@r#   test_leftright_precondzTestQMR.test_leftright_precondO  s(    	5A1gS!c'C40*=aVL1C q#Q0A?C#A/1v>77	%	%	*	* QF7HEQF7HEarbR@4qyyAEAI$a.000r&   N)r5   r6   r7   r   markfilterwarningsr*  r8   r&   r#   r  r  N  s%    [[ NO$1 P$1r&   r  c                       e Zd Zd Zej
                  j                  de d      d        Zd Z	ej
                  j                  d      d        Zd Zd	 Zej
                  j                  de d      d
        Zd Zy)	TestGMRESc                     t        j                  t        j                  d      dz         d d d d df   }t        j                  d      }d|d<   t	        ||dd      \  }}t        |d   dd	       y )
NrR   rJ   rI   r      )restartr   g`"?r   r   )ra   vanderr   r   r   r   )r3   r-   r0   x_gmr   s        r#   
test_basiczTestGMRES.test_basicx  sd    IIbiima'(DbD1HHRL!!Q15	cQT2r&   zignore:z:DeprecationWarningc                   	 d 	t        t        g dg dg dg dg dg dg            }t        |j                  d   f      }d	}t	        |d	z         d
d<   	fd}t        ||t	        |j                  d         d||      \  }}t        t        d
dg      d       dt        j                  |j                  d         z  }t	        |d	z         d
d<   t        |||d||      \  }}t        t        d
dg      d       y )Nc                 R    | ||j                         d   j                         dz   <   y r   )nonzeror   )rrvecs     r#   store_residualz/TestGMRES.test_callback.<locals>.store_residual  s%    01D"&&(1,-r&   )r  rJ   r   r   r   r   )rJ   r  rJ   r   r   r   )r   rJ   r  rJ   r   r   )r   r   rJ   r  rJ   r   )r   r   r   rJ   r  rJ   )r   r   r   r   rJ   r  r   rJ   r   c                      |       S r   r8   )r8  r9  r:  s    r#   r   z)TestGMRES.test_callback.<locals>.callback  s    !!T**r&   gؗҜ<r   g>,p ?绽|=r   gMbP?)r   r   r   r   g!{bEJ?)	r   r   r   r.   r   r   r   ra   r	   )
r3   r-   r0   r   r   r   flagr   r9  r:  s
           @@r#   test_callbackzTestGMRES.test_callback  s   	2 e0000002 3 4 !''!*Wq[!Q	+ 1qwwqz!2 '(<4 	eS*=$>?eL 266!''!*%%Wq[!Q1w!)+4
 	eS*D$EF"	$r&   c                 "   t        d      }t        d      }t        ||      \  }}|j                  t              }t        |j                  t              |j                  t                    \  }}t        |      sJ t        ||       ||k(  sJ y )NrH   )r	   r   r   r`   complexr
   r   )r3   r-   r0   r_xr_infor   r   s          r#   test_abizTestGMRES.test_abi  su    FGAqkVjj!)188G+<=4AQ~~r&   rR   c                    t        d      }t        d      }t        ||d      \  }}t        j                  j                  ||z  |z
        dt        j                  j                  |      z  k  sJ t        ||dd       t        j                  j                  d      }|j                  dd      }d	t        d      z  }t        ||d
d      \  }}t        j                  j                  ||z  |z
        d
kD  sJ t        d      }dt        d      z  }t        ||dd      \  }}t        j                  j                  ||z  |z
        dt        j                  j                  |      z  k  sJ y )NrH   r  r   r   r   r   i90     r   gHz>r   )r   r1  r<  r   )
r	   r   r   ra   r   r   r   rb   rc   rX   )r3   r-   r0   r   r   rndms         r#   test_atol_legacyzTestGMRES.test_atol_legacy  s2    FG14(4yy~~a!eai(D299>>!3D,DDDD1140yy$$U+IIb"48O1444yy~~a!eai(4///FDGO14a04yy~~a!eai(D299>>!3D,DDDDr&   c                    t        j                  d      }d|d<   t        j                  g d      }t        j                  g d      }t        j                  g d      }t	        ||||dd      \  }}t        j
                  |      j                         rJ |dk(  rJt         j                  j                  ||z  |z
        dt         j                  j                  |      z  k  sJ t        |||z  z  ||z         y )	NrG   r   )rH   rH   )r   rJ   rJ   rJ   r   r   )rH   rG   rS   r   )r   r   r   r   )
ra   r	   r   diagr   isnananyr   r   r   )r3   r   r0   r   r-   r   s         r#    test_defective_precond_breakdownz*TestGMRES.test_defective_precond_breakdown  s    FF1I$HHYHHYGGI1ae!<4 88A;??$$$1999>>!a%!),		q8I0IIII 	QUQU+r&   c                    t        j                  g dg dg dg      }t        j                  g d      }d}t        |||d      \  }}t        j                  |      j	                         rJ |dk(  rJt         j
                  j                  ||z  |z
        |t         j
                  j                  |      z  k  sJ t        |||z  z  ||z         y )N)r   rJ   r   rI  )r   r   r   )rJ   r   rJ   r   r   r   )ra   r   r   rK  rL  r   r   r   )r3   r-   r0   r   r   r   s         r#   test_defective_matrix_breakdownz)TestGMRES.test_defective_matrix_breakdown  s    HHiI67HHY14a04 88A;??$$$1999>>!a%!),ryy~~a7H0HHHH 	QUQU+r&   c           
      *   t         j                  j                  d       t         j                  j                  dd      }t         j                  j                  d      }dgfd}fd}dgt	        ||dd|dd	      \  }}|dk(  sJ d   dk(  sJ dgt	        ||dd|ddd
      \  }}|dk(  sJ d   dk(  sJ dgt	        ||dd|ddd      \  }}|dk(  sJ d   dkD  sJ dgt	        ||dd|ddd      \  }}|dk(  sJ d   dk(  sJ y )NrJ   r   r   c                 D    dxx   dz  cc<   t        | t              sJ y r   )r   r/   )r8  cb_counts    r#   
pr_norm_cbz0TestGMRES.test_callback_type.<locals>.pr_norm_cb  s!    QK1Ka'''r&   c                 X    dxx   dz  cc<   t        | t        j                        sJ y r   )r   ra   r   )r   rR  s    r#   x_cbz*TestGMRES.test_callback_type.<locals>.x_cb  s%    QK1Ka,,,r&   r   rH   2   )r   r   r   r   r1  r
  r   r   r   r   r1  callback_typepr_normr   )ra   rb   re   rX   r   )r3   r-   r0   rS  rU  r   r   rR  s          @r#   test_callback_typezTestGMRES.test_callback_type  sb    			qIINN2r"IINN23	(	-
 314a* !2/4qyy{a 314a* !2XG4qyy{a 314a* !2YH4qyy{Q 314a$ "#74qyy{ar&   c           
      B   t         j                  j                  d      }|j                  dd      t        j                  d      z   |j                  d      t         j
                  gdgfd}t        dd|ddd      \  }}|dk(  sJ d   dk(  sJ y )	NrJ   r   r   c                     t         j                  j                  | z  z
        }|d   k  sJ |d<   dxx   dz  cc<   y r   )ra   r   r   )r   r8  r-   r0   countprev_rs     r#   rU  z1TestGMRES.test_callback_x_monotonic.<locals>.x_cb   sC    		q1uqy)Aq	>!>F1I!HMHr&   r   rR   r   rW  )ra   rb   rc   rX   r	   r   r   )	r3   rq   rU  r   r   r-   r0   r]  r^  s	        @@@@r#   test_callback_x_monotonicz#TestGMRES.test_callback_x_monotonic  s    ii##A&HHRrvvbz)HHRL&&	 14a$ "#74rzzQx2~~r&   N)r5   r6   r7   r4  r   r+  r,  r   r>  rC  	fail_slowrG  rM  rO  rZ  r_  r8   r&   r#   r.  r.  w  s    3 [['.)99L MN$$ O$$L
 [[2E E&,&, [['.)99L MN*  O* Xr&   r.  )B__doc__r   r   r   numpyra   numpy.testingr   r   r   r   r   r   r	   r
   numpy.linalgr   scipy.sparser   r   r   scipy.sparse.linalgr   r   scipy.sparse.linalg._isolver   r   r   r   r   r   r   r   r   r   rt   r   fixturer$   r(   r:   rD   rw   r]   r,   rv   r+  thread_unsafer   r   r   r`  parametrizer   r   r   r   r   r   r   r   r  r	  r  r  r.  r   s   0r#   <module>rk     s       = ? ?  6 6 @= = = (BWeVC  A xy1 21 1$	  	 K K\ 	((* u5"95a1665"9J K  6*,%-R r_->-D-D "K-D%&VV/I%I #$-D "K);7  9-$9 -$`01f/> .)%/ *%/P-.-$ 8, - !2!8!89 : (	 !56$ 7$&1 &1Rr rA #:F"Ks   I
I