Ë
    ÏÍ:j%K  ã                   ó
  — d Z ddlZddlmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZmZ ddlmZ dd	lmZ g d
¢Zd„ Z	 	 dd„Zdd„Z ed«      d„ «       Z ed«      dd„«       Z ed«      dddddœd„«       Z edd«      d„ «       Zy)zSVD decomposition functions.é    N)Ú_apply_over_batchÚ_deprecate_dtypesé   )Ú_batched_linalg)ÚLinAlgErrorÚ_datacopied)Ú_normalize_lapack_dtypeÚ_ensure_aligned_and_nativeÚ	HAS_ILP64)Úget_lapack_funcs)Ú_asarray_validated)ÚsvdÚsvdvalsÚdiagsvdÚorthÚsubspace_anglesÚ
null_spacec           
      óÆ   — | D ]\  }|d   }|d   }|dk7  sŒ|dkD  rt        d|› d�«      ‚|dk  sŒ-|dk(  r|dk(  rd|› d	�}t        |«      ‚t        d
| › d|› d|› d�«      ‚ y)zAFormat/emit errors/warnings from a lowlevel batched routine.
    Úlapack_infoÚnumr   z!SVD did not converge for slice = ú.Úgesddéüÿÿÿzslice z has a NaN entryzillegal value in zth argument of internal z  for slice N)r   Ú
ValueError)Úerr_lstÚlapack_driverÚentryÚinfor   Úmsgs         úm/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/scipy/linalg/_decomp_svd.pyÚ_format_emit_errors_warningsr!      s¢   € ð ò ˆØ�]Ñ#ˆØ�E‰lˆØ�1‹9Ø�aŠxÜ!Ð$EÀcÀUÈ!Ð"LÓMÐMØ�a‹xØ  GÒ+°¸²
Ø" 3 %Ð'7Ð8�CÜ$ S›/Ð)Ü Ø'¨¨ wÐ.FÀ}ÀoØ" 3 % qð*óð ñó    TFr   c                 óR  — t        |t        «      st        d«      ‚|dvrd|› d�}t        |«      ‚t	        | |¬«      }t        d|«       |j                  dk  rt        d|j                  ›�«      ‚|j                  d	   |j                  d
   }	}t        ||«      \  }}t        ||«      \  }}|xs t        || «      }|xr  |j                  dk(  xr |j                  d   }|j                  dk(  �r:t        t        j                  d|j                   ¬«      «      \  }
}}|j                  dd	 }t        j"                  ||dz   |j                   ¬«      }|rt        j"                  ||||fz   |
j                   ¬«      }t        j$                  |«      |d<   t        j"                  |||	|	fz   |j                   ¬«      }t        j$                  |	«      |d<   nNt        j"                  |||dfz   |
j                   ¬«      }t        j"                  ||d|	fz   |j                   ¬«      }|r|||fS |S |rÄ||	kD  r||	fn|	|f\  }}|rKt&        s¬||z  t        j(                  t        j*                  «      j,                  kD  ryt        d|› d|› d�«      ‚t-        ||z  |	|z  «      }t&        sOt-        ||z  |	|z  «      t        j(                  t        j*                  «      j,                  kD  rt        d|› d�«      ‚t/        j0                  |||||«      }|d
   }|rt3        ||«       |r|dd
 S |d   S )aÃ  
    Singular Value Decomposition.

    Factorizes the matrix `a` into two unitary matrices ``U`` and ``Vh``, and
    a 1-D array ``s`` of singular values (real, non-negative) such that
    ``a == U @ S @ Vh``, where ``S`` is a suitably shaped matrix of zeros with
    main diagonal ``s``.

    Parameters
    ----------
    a : (..., M, N) array_like
        Matrix to decompose.
    full_matrices : bool, optional
        If True (default), `U` and `Vh` are of shape ``(M, M)``, ``(N, N)``.
        If False, the shapes are ``(M, K)`` and ``(K, N)``, where
        ``K = min(M, N)``.
    compute_uv : bool, optional
        Whether to compute also ``U`` and ``Vh`` in addition to ``s``.
        Default is True.
    overwrite_a : bool, optional
        Whether to overwrite data in `a` (may improve performance). Default is False.
        See :ref:`tutorial_linalg_overwrite` for details.
    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.
    lapack_driver : {'gesdd', 'gesvd'}, optional
        Whether to use the more efficient divide-and-conquer approach
        (``'gesdd'``) or general rectangular approach (``'gesvd'``)
        to compute the SVD. MATLAB and Octave use the ``'gesvd'`` approach.
        Default is ``'gesdd'``.

    Returns
    -------
    U : ndarray
        Unitary matrix having left singular vectors as columns.
        Of shape ``(M, M)`` or ``(M, K)``, depending on `full_matrices`.
        Only present when ``compute_uv=True``.
    s : ndarray
        The singular values, sorted in non-increasing order.
        Of shape (K,), with ``K = min(M, N)``.
    Vh : ndarray
        Unitary matrix having right singular vectors as rows.
        Of shape ``(N, N)`` or ``(K, N)`` depending on `full_matrices`.
        Only present when ``compute_uv=True``.

    Raises
    ------
    LinAlgError
        If SVD computation does not converge.

    See Also
    --------
    svdvals : Compute singular values of a matrix.
    diagsvd : Construct the Sigma matrix, given the vector s.

    Notes
    -----
    The array argument of this function, `a`, may have additional
    "batch" dimensions prepended to the core shape. In this case, the array is treated
    as a batch of lower-dimensional slices; see :ref:`linalg_batch` for details.

    Examples
    --------
    >>> import numpy as np
    >>> from scipy import linalg
    >>> rng = np.random.default_rng()
    >>> m, n = 9, 6
    >>> a = rng.standard_normal((m, n)) + 1.j*rng.standard_normal((m, n))
    >>> U, s, Vh = linalg.svd(a)
    >>> U.shape,  s.shape, Vh.shape
    ((9, 9), (6,), (6, 6))

    Reconstruct the original matrix from the decomposition:

    >>> sigma = np.zeros((m, n))
    >>> for i in range(min(m, n)):
    ...     sigma[i, i] = s[i]
    >>> a1 = U @ sigma @ Vh
    >>> np.allclose(a, a1)
    True

    Alternatively, use ``full_matrices=False`` (notice that the shape of
    ``U`` is then ``(m, n)`` instead of ``(m, m)``):

    >>> U, s, Vh = linalg.svd(a, full_matrices=False)
    >>> U.shape, s.shape, Vh.shape
    ((9, 6), (6,), (6, 6))
    >>> S = np.diag(s)
    >>> np.allclose(a, U @ S @ Vh)
    True

    >>> s2 = linalg.svd(a, compute_uv=False)
    >>> np.allclose(s, s2)
    True

    If the input matrix has more than two dimensions, it is interpreted as a batch of
    two-dimensional matrices:

    >>> aa = np.stack((a, 2*a))
    >>> linalg.svdvals(aa)[0] == linalg.svdvals(a)
    array([ True,  True,  True,  True,  True,  True])
    >>> linalg.svdvals(aa)[1] == 2 * linalg.svdvals(a)
    array([ True,  True,  True,  True,  True,  True])
    zlapack_driver must be a string)r   Úgesvdz/lapack_driver must be "gesdd" or "gesvd", not "ú"©Úcheck_finiter   é   z&Expected at least ndim=2, got a1.ndim=éþÿÿÿéÿÿÿÿÚF_CONTIGUOUSr   ©ÚdtypeN)r   )Úshaper-   .zIndexing a matrix size z x zu would incur integer overflow in LAPACK. Instead, either use using numpy.linalg.svd or buildSciPy with ILP64 support.zIndexing a matrix of z„ elements would incur an in integer overflow in LAPACK. Instead, either use using numpy.linalg.svd or buildSciPy with ILP64 support.)Ú
isinstanceÚstrÚ	TypeErrorr   r   r   Úndimr.   r	   r
   r   ÚflagsÚsizer   ÚnpÚeyer-   Ú
empty_likeÚidentityr   ÚiinfoÚint32Úmaxr   Ú_svdr!   )ÚaÚfull_matricesÚ
compute_uvÚoverwrite_ar'   r   ÚmessageÚa1ÚmÚnÚu0Ús0Úv0Úbatch_shapeÚsÚuÚvÚmax_mnÚmin_mnÚszÚresr   s                         r    r   r   %   sÿ  € ôV �m¤SÔ)ÜÐ8Ó9Ð9ØÐ.Ñ.ØCÀMÀ?ÐRSÐTˆÜ˜Ó!Ð!ô 
˜A¨LÔ	9€BÜ�e˜RÔ à	‡w�w�‚{ÜÐB¸"¿'¹'¸ÐDÓEÐEà�8‰8�B‰<˜Ÿ™ "™€q€Aô .¨b°+Ó>�O€BˆÜ0°°[ÓA�O€BˆàÒ5¤+¨b°!Ó"4€KØÒO 2§7¡7¨a¡<ÒO°b·h±h¸~Ñ6N€Kð 
‡w�w�!ƒ|ÜœŸ™ ¨¯©Ô2Ó3‰
ˆˆB�à—h‘h˜s �mˆÜ�M‰M˜" K°$Ñ$6¸b¿h¹hÔGˆÙÜ—‘˜b¨°q¸!°fÑ(<ÀBÇHÁHÔMˆAÜ—[‘[ “^ˆAˆc‰FÜ—‘˜b¨°q¸!°fÑ(<ÀBÇHÁHÔMˆAÜ—[‘[ “^ˆAˆcŠFä—‘˜b¨°q¸!°fÑ(<ÀBÇHÁHÔMˆAÜ—‘˜b¨°q¸!°fÑ(<ÀBÇHÁHÔMˆAÙØ�a˜�7ˆNàˆHáØ#$ q¢5˜!˜Q™¨q°!¨f‰ˆ�ÙÝ ¨¡´·±¼"¿(¹(Ó1C×1GÑ1GÒ!GÜ Ð#:¸6¸(À#ÀfÀXð N>ð ">ó ?ð ?ô
 �Q˜‘Z  V¡Ó,ˆBÝ¤ Q¨¡Z°°V±Ó!<¼r¿x¹xÌÏÉÓ?Q×?UÑ?UÒ!UÜ Ð#8¸¸ð =>ð ">ó ?ð ?ô
 ×
Ñ
Ø
ˆM˜: }°kó€Cð �"‰g€GÙÜ$ W¨mÔ<áØ�3�Bˆxˆà�1‰vˆr"   c                 ó    — t        | d||¬«      S )aõ
  
    Compute singular values of a matrix.

    Parameters
    ----------
    a : (M, N) array_like
        Matrix to decompose.
    overwrite_a : bool, optional
        Whether to overwrite data in `a` (may improve performance). Default is False.
        See :ref:`tutorial_linalg_overwrite` for details.
    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
    -------
    s : (min(M, N),) ndarray
        The singular values, sorted in decreasing order.

    Raises
    ------
    LinAlgError
        If SVD computation does not converge.

    See Also
    --------
    svd : Compute the full singular value decomposition of a matrix.
    diagsvd : Construct the Sigma matrix, given the vector s.

    Notes
    -----
    Array argument of this function, `a`, may have additional
    "batch" dimensions prepended to the core shape. In this case, the array is treated
    as a batch of lower-dimensional slices; see :ref:`linalg_batch` for details.

    Examples
    --------
    >>> import numpy as np
    >>> from scipy.linalg import svdvals
    >>> m = np.array([[1.0, 0.0],
    ...               [2.0, 3.0],
    ...               [1.0, 1.0],
    ...               [0.0, 2.0],
    ...               [1.0, 0.0]])
    >>> svdvals(m)
    array([ 4.28091555,  1.63516424])

    If the input matrix has more than two dimensions, it is interpreted as a batch of
    two-dimensional matrices:

    >>> mm = np.stack((m, 2*m))
    >>> svdvals(mm)
    array([[4.28091555, 1.63516424],
           [8.56183109, 3.27032847]])

    We can verify the maximum singular value of `m` by computing the maximum
    length of `m @ u` over all the unit vectors `u` in the (x,y) plane.
    We approximate "all" the unit vectors with a large sample. Because
    of linearity, we only need the unit vectors with angles in ``[0, pi]``.

    >>> t = np.linspace(0, np.pi, 2000)
    >>> u = np.array([np.cos(t), np.sin(t)])
    >>> np.linalg.norm(m @ u, axis=0).max()
    4.2809152422538475

    `p` is a projection matrix with rank 1. With exact arithmetic,
    its singular values would be ``[1, 0, 0, 0]``.

    >>> v = np.array([0.1, 0.3, 0.9, 0.3])
    >>> p = np.outer(v, v)
    >>> svdvals(p)
    array([  1.00000000e+00,   2.02021698e-17,   1.56692500e-17,
             8.15115104e-34])

    The singular values of an orthogonal matrix are all 1. Here, we
    create a random orthogonal matrix by using the ``rvs()`` method of
    `scipy.stats.ortho_group`.

    >>> from scipy.stats import ortho_group
    >>> orth = ortho_group.rvs(4)
    >>> svdvals(orth)
    array([ 1.,  1.,  1.,  1.])
    r   )r?   r@   r'   )r   )r=   r@   r'   s      r    r   r   ×   s   € ôj ˆq˜Q¨KØ(ô*ð *r"   )rI   r   c                 óX  — t        j                  | «      }|j                  j                  }t	        | «      }||k(  r1t        j
                  |t        j                  |||z
  f|¬«      f«      S ||k(  r/t         j                  |t        j                  ||z
  |f|¬«      f   S t        d«      ‚)a§  
    Construct the sigma matrix in SVD from singular values and size M, N.

    Parameters
    ----------
    s : (M,) or (N,) array_like
        Singular values
    M : int
        Size of the matrix whose singular values are `s`.
    N : int
        Size of the matrix whose singular values are `s`.

    Returns
    -------
    S : (M, N) ndarray
        The S-matrix in the singular value decomposition

    See Also
    --------
    svd : Singular value decomposition of a matrix
    svdvals : Compute singular values of a matrix.

    Examples
    --------
    >>> import numpy as np
    >>> from scipy.linalg import diagsvd
    >>> vals = np.array([1, 2, 3])  # The array representing the computed svd
    >>> diagsvd(vals, 3, 4)
    array([[1, 0, 0, 0],
           [0, 2, 0, 0],
           [0, 0, 3, 0]])
    >>> diagsvd(vals, 4, 3)
    array([[1, 0, 0],
           [0, 2, 0],
           [0, 0, 3],
           [0, 0, 0]])

    r,   zLength of s must be M or N.)	r5   Údiagr-   ÚcharÚlenÚhstackÚzerosÚr_r   )rI   ÚMÚNÚpartÚtypÚMorNs         r    r   r   0  s�   € ôP �7‰7�1‹:€DØ
�*‰*�/‰/€CÜˆq‹6€DØˆq‚yÜ�y‰y˜$¤§¡¨!¨Q°©U¨¸3Ô ?Ð@ÓAÐAØ	�ŠÜ�u‰u�Tœ2Ÿ8™8 Q¨¡U¨A J°cÔ:Ð:Ñ;Ð;äÐ6Ó7Ð7r"   )ÚAr(   c                 óZ  — t        | d¬«      \  }}}|j                  d   |j                  d   }}|€6t        j                  |j                  «      j
                  t        ||«      z  }t        j                  |d¬«      |z  }t        j                  ||kD  t        ¬«      }|dd…d|…f   }	|	S )	aƒ  
    Construct an orthonormal basis for the range of A using SVD.

    Parameters
    ----------
    A : (M, N) array_like
        Input array
    rcond : float, optional
        Relative condition number. Singular values ``s`` smaller than
        ``rcond * max(s)`` are considered zero.
        Default: floating point eps * max(M,N).

    Returns
    -------
    Q : (M, K) ndarray
        Orthonormal basis for the range of A.
        K = effective rank of A, as determined by rcond

    See Also
    --------
    svd : Singular value decomposition of a matrix
    null_space : Matrix null space

    Examples
    --------
    >>> import numpy as np
    >>> from scipy.linalg import orth
    >>> A = np.array([[2, 0, 0], [0, 5, 0]])  # rank 2 array
    >>> orth(A)
    array([[0., 1.],
           [1., 0.]])
    >>> orth(A.T)
    array([[0., 1.],
           [1., 0.],
           [0., 0.]])

    F)r>   r   r   Nç        ©Úinitialr,   )
r   r.   r5   Úfinfor-   Úepsr;   ÚamaxÚsumÚint)
r]   ÚrcondrJ   rI   ÚvhrX   rY   Útolr   ÚQs
             r    r   r   e  s—   € ôN �1 EÔ*�H€A€qˆ"Ø�7‰7�1‰:�r—x‘x ‘{€q€AØ€}Ü—‘˜Ÿ™Ó!×%Ñ%¬¨A¨q«	Ñ1ˆÜ
�'‰'�!˜RÔ
  5Ñ
(€CÜ
�&‰&��S‘¤Ô
$€CØ	Š!ˆTˆcˆTˆ'‰
€AØ€Hr"   )r@   r'   r   c                ó�  — t        | d|||¬«      \  }}}|j                  d   |j                  d   }	}|€6t        j                  |j                  «      j
                  t        ||	«      z  }t        j                  |d¬«      |z  }
t        j                  ||
kD  t        ¬«      }||d…dd…f   j                  j                  «       }|S )	a  
    Construct an orthonormal basis for the null space of A using SVD.

    Parameters
    ----------
    A : (M, N) array_like
        Input array
    rcond : float, optional
        Relative condition number. Singular values ``s`` smaller than
        ``rcond * max(s)`` are considered zero.
        Default: floating point eps * max(M,N).
    overwrite_a : bool, optional
        Whether to overwrite `a`; may improve performance. Default is False.
        See :ref:`tutorial_linalg_overwrite` for details.
    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.
    lapack_driver : {'gesdd', 'gesvd'}, optional
        Whether to use the more efficient divide-and-conquer approach
        (``'gesdd'``) or general rectangular approach (``'gesvd'``)
        to compute the SVD. MATLAB and Octave use the ``'gesvd'`` approach.
        Default is ``'gesdd'``.

    Returns
    -------
    Z : (N, K) ndarray
        Orthonormal basis for the null space of A.
        K = dimension of effective null space, as determined by rcond

    See Also
    --------
    svd : Singular value decomposition of a matrix
    orth : Matrix range

    Examples
    --------
    1-D null space:

    >>> import numpy as np
    >>> from scipy.linalg import null_space
    >>> A = np.array([[1, 1], [1, 1]])
    >>> ns = null_space(A)
    >>> ns * np.copysign(1, ns[0,0])  # Remove the sign ambiguity of the vector
    array([[ 0.70710678],
           [-0.70710678]])

    2-D null space:

    >>> from numpy.random import default_rng
    >>> rng = default_rng()
    >>> B = rng.random((3, 5))
    >>> Z = null_space(B)
    >>> Z.shape
    (5, 2)
    >>> np.allclose(B.dot(Z), 0)
    True

    The basis vectors are orthonormal (up to rounding error):

    >>> Z.T.dot(Z)
    array([[  1.00000000e+00,   6.92087741e-17],
           [  6.92087741e-17,   1.00000000e+00]])

    T)r>   r@   r'   r   r   r   Nr_   r`   r,   )r   r.   r5   rb   r-   rc   r;   rd   re   rf   ÚTÚconj)r]   rg   r@   r'   r   rJ   rI   rh   rX   rY   ri   r   rj   s                r    r   r   –  s¬   € ôH �1 D°kØ ,¸MôK�H€A€qˆ"à�7‰7�1‰:�r—x‘x ‘{€q€AØ€}Ü—‘˜Ÿ™Ó!×%Ñ%¬¨A¨q«	Ñ1ˆÜ
�'‰'�!˜RÔ
  5Ñ
(€CÜ
�&‰&��S‘¤Ô
$€CØ
ˆ3‰4’ˆ6‰
�‰×ÑÓ€AØ€Hr"   )ÚBr(   c                 ó$  — t        | d¬«      } t        | j                  «      dk7  rt        d| j                  › �«      ‚t	        | «      }~ t        |d¬«      }t        |j                  «      dk7  rt        d|j                  › �«      ‚t        |«      t        |«      k7  r+t        d|j                  d   › d|j                  d   › �«      ‚t	        |«      }~t        j                  |j                  j                  «       |«      }t        |«      }|j                  d   |j                  d   k\  r|t        j                  ||«      z
  }n1|t        j                  ||j                  j                  «       «      z
  }~~~|dz  d	k\  }|j                  «       r6t        j                  t        j                  t        |d¬
«      dd«      «      }nd}t        j                  ||t        j                  t        j                  |ddd…   dd«      «      «      }|S )a­  
    Compute the subspace angles between two matrices.

    Parameters
    ----------
    A : (M, N) array_like
        The first input array.
    B : (M, K) array_like
        The second input array.

    Returns
    -------
    angles : ndarray, shape (min(N, K),)
        The subspace angles between the column spaces of `A` and `B` in
        descending order.

    See Also
    --------
    orth
    svd

    Notes
    -----
    This computes the subspace angles according to the formula
    provided in [1]_. For equivalence with MATLAB and Octave behavior,
    use ``angles[0]``.

    .. versionadded:: 1.0

    References
    ----------
    .. [1] Knyazev A, Argentati M (2002) Principal Angles between Subspaces
           in an A-Based Scalar Product: Algorithms and Perturbation
           Estimates. SIAM J. Sci. Comput. 23:2008-2040.

    Examples
    --------
    A Hadamard matrix, which has orthogonal columns, so we expect that
    the subspace angle to be :math:`\frac{\pi}{2}`:

    >>> import numpy as np
    >>> from scipy.linalg import hadamard, subspace_angles
    >>> rng = np.random.default_rng()
    >>> H = hadamard(4)
    >>> print(H)
    [[ 1  1  1  1]
     [ 1 -1  1 -1]
     [ 1  1 -1 -1]
     [ 1 -1 -1  1]]
    >>> np.rad2deg(subspace_angles(H[:, :2], H[:, 2:]))
    array([ 90.,  90.])

    And the subspace angle of a matrix to itself should be zero:

    >>> subspace_angles(H[:, :2], H[:, :2]) <= 2 * np.finfo(float).eps
    array([ True,  True], dtype=bool)

    The angles between non-orthogonal subspaces are in between these extremes:

    >>> x = rng.standard_normal((4, 3))
    >>> np.rad2deg(subspace_angles(x[:, :2], x[:, [2]]))
    array([ 55.832])  # random
    Tr&   r(   zexpected 2D array, got shape z/A and B must have the same number of rows, got r   z and r   g      à?)r@   g      ð¿g      ð?r_   Nr*   )r   rT   r.   r   r   r5   Údotrl   rm   r   ÚanyÚarcsinÚclipÚwhereÚarccos)	r]   rn   ÚQAÚQBÚQA_H_QBÚsigmaÚmaskÚ	mu_arcsinÚthetas	            r    r   r   å  s¶  € ôH 	˜1¨4Ô0€AÜ
ˆ1�7‰7ƒ|�qÒÜÐ8¸¿¹¸	ÐBÓCÐCÜ	ˆa‹€BØ	ä˜1¨4Ô0€AÜ
ˆ1�7‰7ƒ|�qÒÜÐ8¸¿¹¸	ÐBÓCÐCÜ
ˆ1ƒv”�R“ÒÜÐJØŸH™H Q™K˜=¨¨a¯g©g°a©j¨\ð;ó <ð 	<ä	ˆa‹€BØ	ô �f‰f�R—T‘T—Y‘Y“[ "Ó%€GÜ�GÓ€Eð 
‡x�x��{�b—h‘h˜q‘kÒ!Ø”—‘˜˜GÓ$Ñ$‰à”—‘˜˜GŸI™IŸN™NÓ,Ó-Ñ-ˆØ
ˆB�ð �A‰:˜Ñ€DØ‡x�x„zÜ—I‘IœbŸg™g¤g¨a¸TÔ&BÀCÈÓLÓM‰	àˆ	ô
 �H‰H�T˜9¤b§i¡i´·±¸¹dÀ¸d¹ÀSÈ"Ó0MÓ&NÓO€EØ€Lr"   )TTFTr   )FT)N)Ú__doc__Únumpyr5   Úscipy._lib._utilr   r   Ú r   Ú_miscr   r   Úlapackr	   r
   r   Úscipy.linalg.lapackr   Ú_decompr   Ú__all__r!   r   r   r   r   r   r   © r"   r    ú<module>r‡      sÀ   ðÙ "Û ç AÝ ÷ ,ß RÑ RÝ 0Ý 'ò Q€òð( =BØ)0óoódV*ñr �8Óñ/8ó ð/8ñh �8Óò-ó ð-ñ` �8ÓðK¨UÀØ$óKó ðKñ\ �8˜XÓ&ñhó 'ñhr"   