
    (ph5                         S r SSKrSSKJrJrJrJr  SSKJrJ	r	  SSK
Jr  / SQr  SS jrSS	 jrSS
 jrSS jrSS jrSS jrg)z!Cholesky decomposition functions.    N)asarray_chkfiniteasarray
atleast_2d
empty_like   )LinAlgError_datacopied)get_lapack_funcs)cholesky
cho_factor	cho_solvecholesky_bandedcho_solve_bandedc                 b   U(       a  [        U 5      O
[        U 5      n[        U5      nUR                  S:w  a  [	        SUR                   S35      eUR
                  S   UR
                  S   :w  a  [	        SUR
                   S35      eUR                  S:X  a=  [        [        R                  " SUR                  S95      R                  n[        XVS9U4$ U=(       d    [        XP5      n[        S	U45      u  nU" XQX#S
9u  pU	S:  a  [        SU	-  5      eU	S:  a  [	        SU	*  S35      eX4$ )z,Common code for cholesky() and cho_factor().   z*Input array needs to be 2D but received a zd-array.r   r   z8Input array is expected to be square but has the shape: .dtype)potrf)loweroverwrite_acleanz9%d-th leading minor of the array is not positive definitez$LAPACK reported an illegal value in z -th argumenton entry to "POTRF".)r   r   r   ndim
ValueErrorshapesizer   npeyer   r   r	   r
   r   )
ar   r   r   check_finitea1dtr   cinfos
             P/var/www/html/venv/lib/python3.13/site-packages/scipy/linalg/_decomp_cholesky.py	_choleskyr&      s9    ".	1	71:B	BB 
ww!|EbggYhWXX	xx{bhhqk! '')xxj3 4 	4 
ww!|bffQbhh/066"'..3R!3Kj2%0FEBJGAax %'+, - 	-ax?w G0 0 1 	18O    c                 "    [        XUSUS9u  pAU$ )a  
Compute the Cholesky decomposition of a matrix.

Returns the Cholesky decomposition, :math:`A = L L^*` or
:math:`A = U^* U` of a Hermitian positive-definite matrix A.

Parameters
----------
a : (M, M) array_like
    Matrix to be decomposed
lower : bool, optional
    Whether to compute the upper- or lower-triangular Cholesky
    factorization. During decomposition, only the selected half of the
    matrix is referenced. Default is upper-triangular.
overwrite_a : bool, optional
    Whether to overwrite data in `a` (may improve performance).
check_finite : bool, optional
    Whether to check that the entire input matrix contains only finite numbers.
    Disabling may give a performance gain, but may result in problems
    (crashes, non-termination) if the inputs do contain infinities or NaNs.

Returns
-------
c : (M, M) ndarray
    Upper- or lower-triangular Cholesky factor of `a`.

Raises
------
LinAlgError : if decomposition fails.

Notes
-----
During the finiteness check (if selected), the entire matrix `a` is
checked. During decomposition, `a` is assumed to be symmetric or Hermitian
(as applicable), and only the half selected by option `lower` is referenced.
Consequently, if `a` is asymmetric/non-Hermitian, `cholesky` may still
succeed if the symmetric/Hermitian matrix represented by the selected half
is positive definite, yet it may fail if an element in the other half is
non-finite.

Examples
--------
>>> import numpy as np
>>> from scipy.linalg import cholesky
>>> a = np.array([[1,-2j],[2j,5]])
>>> L = cholesky(a, lower=True)
>>> L
array([[ 1.+0.j,  0.+0.j],
       [ 0.+2.j,  1.+0.j]])
>>> L @ L.T.conj()
array([[ 1.+0.j,  0.-2.j],
       [ 0.+2.j,  5.+0.j]])

Tr   r   r   r    r&   r   r   r   r    r#   s        r%   r   r   .   s    n [&24HAHr'   c                 $    [        XUSUS9u  pAXA4$ )a	  
Compute the Cholesky decomposition of a matrix, to use in cho_solve

Returns a matrix containing the Cholesky decomposition,
``A = L L*`` or ``A = U* U`` of a Hermitian positive-definite matrix `a`.
The return value can be directly used as the first parameter to cho_solve.

.. warning::
    The returned matrix also contains random data in the entries not
    used by the Cholesky decomposition. If you need to zero these
    entries, use the function `cholesky` instead.

Parameters
----------
a : (M, M) array_like
    Matrix to be decomposed
lower : bool, optional
    Whether to compute the upper or lower triangular Cholesky factorization.
    During decomposition, only the selected half of the matrix is referenced.
    (Default: upper-triangular)
overwrite_a : bool, optional
    Whether to overwrite data in a (may improve performance)
check_finite : bool, optional
    Whether to check that the entire input matrix contains only finite numbers.
    Disabling may give a performance gain, but may result in problems
    (crashes, non-termination) if the inputs do contain infinities or NaNs.

Returns
-------
c : (M, M) ndarray
    Matrix whose upper or lower triangle contains the Cholesky factor
    of `a`. Other parts of the matrix contain random data.
lower : bool
    Flag indicating whether the factor is in the lower or upper triangle

Raises
------
LinAlgError
    Raised if decomposition fails.

See Also
--------
cho_solve : Solve a linear set equations using the Cholesky factorization
            of a matrix.

Notes
-----
During the finiteness check (if selected), the entire matrix `a` is
checked. During decomposition, `a` is assumed to be symmetric or Hermitian
(as applicable), and only the half selected by option `lower` is referenced.
Consequently, if `a` is asymmetric/non-Hermitian, `cholesky` may still
succeed if the symmetric/Hermitian matrix represented by the selected half
is positive definite, yet it may fail if an element in the other half is
non-finite.

Examples
--------
>>> import numpy as np
>>> from scipy.linalg import cho_factor
>>> A = np.array([[9, 3, 1, 5], [3, 7, 5, 1], [1, 5, 9, 2], [5, 1, 2, 6]])
>>> c, low = cho_factor(A)
>>> c
array([[3.        , 1.        , 0.33333333, 1.66666667],
       [3.        , 2.44948974, 1.90515869, -0.27216553],
       [1.        , 5.        , 2.29330749, 0.8559528 ],
       [5.        , 1.        , 2.        , 1.55418563]])
>>> np.allclose(np.triu(c).T @ np. triu(c) - A, np.zeros((4, 4)))
True

Fr)   r*   r+   s        r%   r   r   j   s!    N [&24HA8Or'   c                    U u  pEU(       a  [        U5      n[        U5      nO[        U5      n[        U5      nUR                  S:w  d   UR                  S   UR                  S   :w  a  [	        S5      eUR                  S   UR                  S   :w  a&  [	        SUR                   SUR                   S35      eUR
                  S:X  a[  [        [        R                  " SUR                  S9S	4[        R                  " SUR                  S95      R                  n[        XgS9$ U=(       d    [        Xa5      n[        S
XF45      u  nU" XFXRS9u  pU
S:w  a  [	        SU
* -  5      eU	$ )a  Solve the linear equations A x = b, given the Cholesky factorization of A.

Parameters
----------
(c, lower) : tuple, (array, bool)
    Cholesky factorization of a, as given by cho_factor
b : array
    Right-hand side
overwrite_b : bool, optional
    Whether to overwrite data in b (may improve performance)
check_finite : bool, optional
    Whether to check that the input matrices contain only finite numbers.
    Disabling may give a performance gain, but may result in problems
    (crashes, non-termination) if the inputs do contain infinities or NaNs.

Returns
-------
x : array
    The solution to the system A x = b

See Also
--------
cho_factor : Cholesky factorization of a matrix

Examples
--------
>>> import numpy as np
>>> from scipy.linalg import cho_factor, cho_solve
>>> A = np.array([[9, 3, 1, 5], [3, 7, 5, 1], [1, 5, 9, 2], [5, 1, 2, 6]])
>>> c, low = cho_factor(A)
>>> x = cho_solve((c, low), [1, 1, 1, 1])
>>> np.allclose(A @ x - [1, 1, 1, 1], np.zeros(4))
True

r   r   r   z$The factored matrix c is not square.zincompatible dimensions (z and )r   T)potrsr   overwrite_bz0illegal value in %dth argument of internal potrs)r   r   r   r   r   r   r   r   r   r   onesr   r	   r
   )c_and_lowerbr1   r    r#   r   b1r"   r/   xr$   s              r%   r   r      sC   H JQq!a QZAJvv{aggajAGGAJ.?@@wwqzRXXa[ 4QWWIU288*ANOO 
ww!|q14813385 	"''3R!3Kj1'2FEA@GAqyK 5! " 	"Hr'   c                 f   U(       a  [        U 5      n O[        U 5      n U R                  S:X  aA  [        [        R
                  " SS/SS//U R                  S95      R                  n[        XS9$ [        SU 45      u  nU" XUS9u  pgUS:  a  [        SU-  5      eUS:  a  [        SU* -  5      eU$ )a  
Cholesky decompose a banded Hermitian positive-definite matrix

The matrix a is stored in ab either in lower-diagonal or upper-
diagonal ordered form::

    ab[u + i - j, j] == a[i,j]        (if upper form; i <= j)
    ab[    i - j, j] == a[i,j]        (if lower form; i >= j)

Example of ab (shape of a is (6,6), u=2)::

    upper form:
    *   *   a02 a13 a24 a35
    *   a01 a12 a23 a34 a45
    a00 a11 a22 a33 a44 a55

    lower form:
    a00 a11 a22 a33 a44 a55
    a10 a21 a32 a43 a54 *
    a20 a31 a42 a53 *   *

Parameters
----------
ab : (u + 1, M) array_like
    Banded matrix
overwrite_ab : bool, optional
    Discard data in ab (may enhance performance)
lower : bool, optional
    Is the matrix in the lower form. (Default is upper form)
check_finite : bool, optional
    Whether to check that the input matrix contains only finite numbers.
    Disabling may give a performance gain, but may result in problems
    (crashes, non-termination) if the inputs do contain infinities or NaNs.

Returns
-------
c : (u + 1, M) ndarray
    Cholesky factorization of a, in the same banded format as ab

See Also
--------
cho_solve_banded :
    Solve a linear set equations, given the Cholesky factorization
    of a banded Hermitian.

Examples
--------
>>> import numpy as np
>>> from scipy.linalg import cholesky_banded
>>> from numpy import allclose, zeros, diag
>>> Ab = np.array([[0, 0, 1j, 2, 3j], [0, -1, -2, 3, 4], [9, 8, 7, 6, 9]])
>>> A = np.diag(Ab[0,2:], k=2) + np.diag(Ab[1,1:], k=1)
>>> A = A + A.conj().T + np.diag(Ab[2, :])
>>> c = cholesky_banded(Ab)
>>> C = np.diag(c[0, 2:], k=2) + np.diag(c[1, 1:], k=1) + np.diag(c[2, :])
>>> np.allclose(C.conj().T @ C - A, np.zeros((5, 5)))
True

r   r   r   )pbtrf)r   overwrite_abz)%d-th leading minor not positive definitez1illegal value in %d-th argument of internal pbtrf)r   r   r   r   r   arrayr   r   r
   r   r   )abr9   r   r    r"   r8   r#   r$   s           r%   r   r      s    x r"R[ 
ww!|RXX1v1v&6bhhGHNN"''j2%0FEB,?GAaxELMMaxL 5! " 	"Hr'   c                 F   U u  pEU(       a  [        U5      n[        U5      nO[        U5      n[        U5      nUR                  S   UR                  S   :w  a  [        S5      eUR                  S:X  al  [        [        R                  " SS/SS//UR                  S95      n[        US4[        R                  " SUR                  S95      R                  n[        XS9$ [        SXA45      u  nU" XAXRS	9u  pU
S:  a  [        S
U
-  5      eU
S:  a  [        SU
* -  5      eU	$ )a  
Solve the linear equations ``A x = b``, given the Cholesky factorization of
the banded Hermitian ``A``.

Parameters
----------
(cb, lower) : tuple, (ndarray, bool)
    `cb` is the Cholesky factorization of A, as given by cholesky_banded.
    `lower` must be the same value that was given to cholesky_banded.
b : array_like
    Right-hand side
overwrite_b : bool, optional
    If True, the function will overwrite the values in `b`.
check_finite : bool, optional
    Whether to check that the input matrices contain only finite numbers.
    Disabling may give a performance gain, but may result in problems
    (crashes, non-termination) if the inputs do contain infinities or NaNs.

Returns
-------
x : array
    The solution to the system A x = b

See Also
--------
cholesky_banded : Cholesky factorization of a banded matrix

Notes
-----

.. versionadded:: 0.8.0

Examples
--------
>>> import numpy as np
>>> from scipy.linalg import cholesky_banded, cho_solve_banded
>>> Ab = np.array([[0, 0, 1j, 2, 3j], [0, -1, -2, 3, 4], [9, 8, 7, 6, 9]])
>>> A = np.diag(Ab[0,2:], k=2) + np.diag(Ab[1,1:], k=1)
>>> A = A + A.conj().T + np.diag(Ab[2, :])
>>> c = cholesky_banded(Ab)
>>> x = cho_solve_banded((c, False), np.ones(5))
>>> np.allclose(A @ x - np.ones(5), np.zeros(5))
True

r   z&shapes of cb and b are not compatible.r   r   Tr   )pbtrsr0   z(%dth leading minor not positive definitez0illegal value in %dth argument of internal pbtrs)r   r   r   r   r   r   r   r:   r   r   r2   r   r
   r   )cb_and_lowerr4   r1   r    cbr   mr"   r>   r6   r$   s              r%   r   r   G  s   \ KRr"a R[AJ 
xx|qwwqz!ABB 	vv{BHHq!fq!f%5RXXFGq$i!'')BCII!&&j2'2FEB@GAaxDtKLLaxK 5! " 	"Hr'   )FFTT)FFT)FT)__doc__numpyr   r   r   r   r   _miscr   r	   lapackr
   __all__r&   r   r   r   r   r    r'   r%   <module>rH      sN    '  D D , $ 8<@9xIX>BM`Gr'   