
    S_f[-                         d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z	 ddl
mZ d dlmZmZ dgZ ed	
      ddedddddddd       Zy)    N)innerzerosinffinfo)norm)sqrt   )make_system)_NoValue_deprecate_positional_argsminresz1.14.0)versiong        Fgh㈵>)shifttolmaxiterMcallbackshowcheckrtolc                H   t        | |||      \  } }}}}|t        ur-d}t        j                  |t        d       |t        |      n|
}
| j                  }|j                  }d}d}| j                  d   }|d|z  }g d}|rDt        |d	z          t        |d
|dd|dz          t        |d|dd|
dz          t                d}d}d}d}d}d}|j                  }t        |      j                  }||j                         }n|| |z  z
  } ||      }t        ||      }|dk  rt        d      |dk(  r
 ||      dfS t        |      }|dk(  r|} ||      dfS t!        |      }|	r ||      } ||      } t        ||      }!t        ||       }"t#        |!|"z
        }#|!|z   |dz  z  }$|#|$kD  rt        d       ||      } t        ||      }!t        ||       }"t#        |!|"z
        }#|!|z   |dz  z  }$|#|$kD  rt        d      d}%|}&d}'d}(|})|}*|}+d},d}-d}.t        |      j$                  }/d}0d}1t'        ||      }t'        ||      }2|} |rt                t                t        d       ||k  r|dz  }d|&z  }!|!|z  }3 ||3      }|||3z  z
  }|dk\  r||&|%z  |z  z
  }t        |3|      }4||4|&z  | z  z
  }| }|}  ||       }|&}%t        | |      }&|&dk  rt        d      t!        |&      }&|-|4dz  |%dz  z   |&dz  z   z  }-|dk(  r|&|z  d|z  k  rd}|(}5|0|'z  |1|4z  z   }6|1|'z  |0|4z  z
  }7|1|&z  }(|0 |&z  }'t        |7|'g      }8|*|8z  }9t        |7|&g      }:t%        |:|      }:|7|:z  }0|&|:z  }1|0|*z  };|1|*z  }*d|:z  }<|2}=|}2|3|5|=z  z
  |6|2z  z
  |<z  }||;|z  z   }t%        |.|:      }.t)        |/|:      }/|+|:z  }#|,|6|#z  z
  }+|( |#z  },t!        |-      }t        |      }||z  }$||z  |z  }>||z  |
z  }?|7}@|@dk(  r|$}@|*})|)}|dk(  s|dk(  rt*        }An|||z  z  }A|dk(  rt*        }Bn|8|z  }B|.|/z  }|dk(  r>dAz   }CdBz   }D|Ddk  rd}Cdk  rd}||k\  rd}|d|z  k\  rd}|>|k\  rd}B|
k  rd}A|
k  rd}d}E|d k  rd!}E|dk  rd!}E||dz
  k\  rd!}E|dz  dk(  rd!}E|)d|>z  k  rd!}E|)d|?z  k  rd!}E|d"|z  k  rd!}E|dk7  rd!}E|rLErJ|d#d$|d   d%d$Ad&}Fd$Bd&}Gd$|d'd$|d'd$|7|z  d'}Ht        |F|Gz   |Hz          |dz  dk(  r
t                | ||       |dk7  rn||k  r|rrt                t        |d(|dd)|d*z          t        |d+|d,d-|d,z          t        |d.|d,d/|d,z          t        |d09d,z          t        |||dz      z          |dk(  r|}Ind}I ||      IfS )1a  
    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 matrix, 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 matrix, 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``.
    tol : float, optional, deprecated

        .. deprecated:: 1.12.0
           `minres` keyword argument ``tol`` is deprecated in favor of ``rtol``
           and will be removed in SciPy 1.14.0.

    Examples
    --------
    >>> import numpy as np
    >>> from scipy.sparse import csc_matrix
    >>> from scipy.sparse.linalg import minres
    >>> A = csc_matrix([[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'scipy.sparse.linalg.minres' keyword argument `tol` is deprecated in favor of `rtol` and will be removed in SciPy v1.14. Until then, if set, it will override `rtol`.   )category
stacklevelz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
   r   warningswarnDeprecationWarningfloatmatvecshapeprintr   r   epscopyr   
ValueErrorr   r   absmaxr   minr   )JAbx0r   r   r   r   r   r   r   r   xpostprocessmsgr+   psolvefirstlastn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infosJ                                                                             Blib/python3.12/site-packages/scipy/sparse/linalg/_isolve/minres.pyr   r      s   p *!QA6Aq!Q
(E 	c$61E _uSz$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)r'   numpyr   r   r   r   numpy.linalgr   mathr   utilsr
   scipy._lib.deprecationr   r   __all__r    ru   rt   <module>r}      sS     * *    G* H-v!3HdDuEv! .v!ru   