
    (ph*              	       d    S SK JrJrJrJr  S SKJr  S SKJr  SSK	J
r
  S/rSSS	SSSS
S
S.S jjrg)    )innerzerosinffinfo)norm)sqrt   )make_systemminresNgh㈵>g        F)rtolshiftmaxiterMcallbackshowcheckc                P   [        XX!5      u  ppnU R                  nUR                  nSnSnU R                  S   nUc  SU-  n/ SQnU(       aD  [        US-   5        [        USUS S	US
 3-   5        [        USUS SUS 3-   5        [        5         SnSnSnSnSnSnU
R                  n[        U5      R                  nUc  UR                  5       nOXU
-  -
  nU" U5      n[        UU5      nUS:  a  [        S5      eUS:X  a
  U" U
5      S4$ [        U5      nUS:X  a  Un
U" U
5      S4$ [        U5      nU	(       a  U" U5      nU" U5      n[        UU5      n [        UU5      n![        U U!-
  5      n"U U-   US-  -  n#U"U#:  a  [        S5      eU" U5      n[        UU5      n [        UU5      n![        U U!-
  5      n"U U-   US-  -  n#U"U#:  a  [        S5      eSn$Un%Sn&Sn'Un(Un)Un*Sn+Sn,Sn-[        U5      R                  n.Sn/Sn0[        UUS9n[        UUS9n1UnU(       a  [        5         [        5         [        S5        UU:  Ga  US-  nSU%-  n U U-  n2U" U25      nUUU2-  -
  nUS:  a  UU%U$-  U-  -
  n[        U2U5      n3UU3U%-  U-  -
  nUnUnU" U5      nU%n$[        UU5      n%U%S:  a  [        S5      e[        U%5      n%U,U3S-  U$S-  -   U%S-  -   -  n,US:X  a  U%U-  SU-  ::  a  SnU'n4U/U&-  U0U3-  -   n5U0U&-  U/U3-  -
  n6U0U%-  n'U/* U%-  n&[        U6U&/5      n7U)U7-  n8[        U6U%/5      n9[        U9U5      n9U6U9-  n/U%U9-  n0U/U)-  n:U0U)-  n)SU9-  n;U1n<Un1U2U4U<-  -
  U5U1-  -
  U;-  nU
U:U-  -   n
[        U-U95      n-[        U.U95      n.U*U9-  n"U+U5U"-  -
  n*U'* U"-  n+[        U,5      n[        U
5      nUU-  n#UU-  U-  n=UU-  U-  n>U6n?U?S:X  a  U#n?U)n(U(nUS:X  d  US:X  a  [         n@OUUU-  -  n@US:X  a  [         nAOU7U-  nAU-U.-  nUS:X  aE  SW@-   nBSWA-   nCUCS::  a  SnWBS::  a  SnUU:  a  SnUSU-  :  a  SnU=U:  a  SnWAU::  a  SnW@U::  a  SnSnDUS::  a  SnDUS::  a  SnDUUS-
  :  a  SnDUS-  S:X  a  SnDU(SU=-  ::  a  SnDU(SU>-  ::  a  SnDUS U-  ::  a  SnDUS:w  a  SnDU(       aR  WD(       aK  US! S"U
S   S# S"W@S$ 3nES"WAS$ 3nFS"US% S"US% S"U6U-  S% 3nG[        UEUF-   UG-   5        US-  S:X  a
  [        5         Ub  U" U
5        US:w  a  O	UU:  a  GM  U(       ar  [        5         [        US&US S'US( 3-   5        [        US)US* S+US* 3-   5        [        US,US* S-US* 3-   5        [        US.W8S* 3-   5        [        UUUS-      -   5        US:X  a  UnHOSnHU" U
5      WH4$ )/a
  
Use MINimum RESidual iteration to solve Ax=b

MINRES minimizes norm(Ax - b) for a real symmetric matrix A.  Unlike
the Conjugate Gradient method, A can be indefinite or singular.

If shift != 0 then the method solves (A - shift*I)x = b

Parameters
----------
A : {sparse array, ndarray, LinearOperator}
    The real symmetric N-by-N matrix of the linear system
    Alternatively, ``A`` can be a linear operator which can
    produce ``Ax`` using, e.g.,
    ``scipy.sparse.linalg.LinearOperator``.
b : ndarray
    Right hand side of the linear system. Has shape (N,) or (N,1).

Returns
-------
x : ndarray
    The converged solution.
info : integer
    Provides convergence information:
        0  : successful exit
        >0 : convergence to tolerance not achieved, number of iterations
        <0 : illegal input or breakdown

Other Parameters
----------------
x0 : ndarray
    Starting guess for the solution.
shift : float
    Value to apply to the system ``(A - shift * I)x = b``. Default is 0.
rtol : float
    Tolerance to achieve. The algorithm terminates when the relative
    residual is below ``rtol``.
maxiter : integer
    Maximum number of iterations.  Iteration will stop after maxiter
    steps even if the specified tolerance has not been achieved.
M : {sparse array, ndarray, LinearOperator}
    Preconditioner for A.  The preconditioner should approximate the
    inverse of A.  Effective preconditioning dramatically improves the
    rate of convergence, which implies that fewer iterations are needed
    to reach a given error tolerance.
callback : function
    User-supplied function to call after each iteration.  It is called
    as callback(xk), where xk is the current solution vector.
show : bool
    If ``True``, print out a summary and metrics related to the solution
    during iterations. Default is ``False``.
check : bool
    If ``True``, run additional input validation to check that `A` and
    `M` (if specified) are symmetric. Default is ``False``.

Examples
--------
>>> import numpy as np
>>> from scipy.sparse import csc_array
>>> from scipy.sparse.linalg import minres
>>> A = csc_array([[3, 2, 0], [1, -1, 0], [0, 5, 1]], dtype=float)
>>> A = A + A.T
>>> b = np.array([2, 4, -1], dtype=float)
>>> x, exitCode = minres(A, b)
>>> print(exitCode)            # 0 indicates successful convergence
0
>>> np.allclose(A.dot(x), b)
True

References
----------
Solution of sparse indefinite systems of linear equations,
    C. C. Paige and M. A. Saunders (1975),
    SIAM J. Numer. Anal. 12(4), pp. 617-629.
    https://web.stanford.edu/group/SOL/software/minres/

This file is a translation of the following MATLAB implementation:
    https://web.stanford.edu/group/SOL/software/minres/minres-matlab.zip

zEnter minres.   zExit  minres.   r      )z3 beta2 = 0.  If M = I, b and x are eigenvectors    z/ beta1 = 0.  The exact solution is x0          z3 A solution to Ax = b was found, given rtol        z3 A least-squares solution was found, given rtol    z3 Reasonable accuracy achieved, given eps           z3 x has converged to an eigenvector                 z3 acond has exceeded 0.1/eps                        z3 The iteration limit was reached                   z3 A  does not define a symmetric matrix             z3 M  does not define a symmetric matrix             z3 M  does not define a pos-def preconditioner       zSolution of symmetric Ax = bz
n      =  3gz     shift  =  z23.14ez
itnlim =  z     rtol   =  z11.2ezindefinite preconditionergUUUUUU?znon-symmetric matrixznon-symmetric preconditioner)dtypezD   Itn     x(1)     Compatible    LS       norm(A)  cond(A) gbar/|A|r	   g      ?   
      g?      F(   Tg{Gz?6g z12.5ez10.3ez8.1ez istop   =  z               itn   =5gz Anorm   =  z12.4ez      Acond =  z rnorm   =  z      ynorm =  z Arnorm  =  )r
   matvecshapeprintr   r   epscopyr   
ValueErrorr   r   absmaxr   minr   )IAbx0r   r   r   r   r   r   r   xpostprocessr!   psolvefirstlastnmsgistopitnAnormAcondrnormynormxtyper$   r1ybeta1bnormwr2stzepsaoldbbetadbarepslnqrnormphibarrhs1rhs2tnorm2gmaxgmincssnw2valfaoldepsdeltagbarrootArnormgammaphidenomw1epsxepsrdiagtest1test2t1t2prntstr1str2str3infosI                                                                            U/var/www/html/venv/lib/python3.13/site-packages/scipy/sparse/linalg/_isolve/minres.pyr   r   
   sb   d *!6A!XXFXXFED	
Aa%
CC e445e
1R&f~FFGe
72,od5\JJKE
CEEEEGGE
,

C 
zVVX1Wr
A"aLEqy455	!A""GEzA""KE 1IAY!AJ!BKAJC3>)t8344 AY!AJ"RLAJC3>)t8;<< DDDEFFDDFD<D	B	
BauA	q	B	BTU
-qHaC1I	M!8T$YN"AQqzdB2JR{!8344Dz$'D!G#dAg--!8EzRV# T	BI%Dy29$T	td{T4L!$ dD\"E3E\E\6kf E	]U2X%.AI 445LeAg~wqy VQs{u}s"u}t#19DA:!EU5[)EA:E5LE T	
 A:UBUBQwQwg~Cu} }} 7D"9D'"*D8q=DRWDRWDDHDA:DD"XQqtEl!E%=9DuUm$DuTl!E$<qeD0ABD$+$%Rx1}QKA:u -x d|E":-CC8LLMd|E%=e}MMNd|E%=e}MMNd|F5>223dSq\!"zN4      )N)numpyr   r   r   r   numpy.linalgr   mathr   utilsr
   __all__r    rk   rj   <module>rr      s6    * *   *j!$c4DuEj!rk   