
    -in*              	       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                0   [        XX!5      u  ppU 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
S4$ [        U5      nUS:X  a  Un
U
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n/[        UUS9n[        UUS9n0UnU(       a  [        5         [        5         [        S5        UU:  Ga  US-  nSU$-  nUU-  n1U" U15      nUUU1-  -
  nUS:  a  UU$U#-  U-  -
  n[        U1U5      n2UU2U$-  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+U2S-  U#S-  -   U$S-  -   -  n+US:X  a  U$U-  SU-  ::  a  SnU&n3U.U%-  U/U2-  -   n4U/U%-  U.U2-  -
  n5U/U$-  n&U.* U$-  n%[        U5U%/5      n6U(U6-  n7[        U5U$/5      n8[        U8U5      n8U5U8-  n.U$U8-  n/U.U(-  n9U/U(-  n(SU8-  n:U0n;Un0U1U3U;-  -
  U4U0-  -
  U:-  nU
U9U-  -   n
[        U,U85      n,[        U-U85      n-U)U8-  n!U*U4U!-  -
  n)U&* U!-  n*[        U+5      n[        U
5      nUU-  n"UU-  U-  n<UU-  U-  n=U5n>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  [         n@OU6U-  n@U,U--  nUS:X  aE  SU?-   nASW@-   nBUBS::  a  SnWAS::  a  SnUU:  a  SnUSU-  :  a  SnU<U:  a  SnW@U::  a  SnU?U::  a  SnSnCUS::  a  SnCUS::  a  SnCUUS-
  :  a  SnCUS-  S:X  a  SnCU'SU<-  ::  a  SnCU'SU=-  ::  a  SnCUS U-  ::  a  SnCUS:w  a  SnCU(       aR  WC(       aK  US! S"U
S   S# S"U?S$ 3nDS"W@S$ 3nES"US% S"US% S"U5U-  S% 3nF[        UDUE-   UF-   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.W7S* 3-   5        [        UUUS-      -   5        US:X  a  UnGU
UG4$ SnGU
WG4$ )/a
  
Solve ``Ax = b`` with the MINimum RESidual method, for a symmetric `A`.

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   )HAbx0r   r   r   r   r   r   r   xr!   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infosH                                                                           U/var/www/html/venv/lib/python3.13/site-packages/scipy/sparse/linalg/_isolve/minres.pyr   r   
   sZ   d Q2)JA!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	!1vGEz1v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 d8O d8O    )N)numpyr   r   r   r   numpy.linalgr   mathr   utilsr
   __all__r    rj   ri   <module>rq      s6    * *   *j$c4DuEjrj   