ó
    Eñip(  ã                   ó"  • S /r SSKrSSKJr  SSKJr  SSKJr  \R                  \R                  \R                  \R                  S.r\R                  \R                  \R                   \R"                  S.rSSS.r " S	 S
5      r    SS jrg)Ú_svdpé    N)Úaslinearoperator)ÚLinAlgErroré   )Ú_propack)ÚfÚdÚFÚD)ÚLMÚSMc                   óD   • \ rS rSrSrS rS r\S 5       r\S 5       r	Sr
g)	Ú_AProdé!   z|
Wrapper class for linear operator

The call signature of the __call__ method matches the callback of
the PROPACK routines.
c                 óŽ   •  [        U5      U l        g ! [         a'    [        [        R                  " U5      5      U l         g f = f©N)r   ÚAÚ	TypeErrorÚnpÚasarray)Úselfr   s     ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/scipy/sparse/linalg/_svdp.pyÚ__init__Ú_AProd.__init__(   s6   € ð	5Ü% aÓ(ˆD�FøÜó 	5Ü%¤b§j¢j°£mÓ4ˆDŽFð	5ús   ‚ “.AÁAc                 óŠ   • US:X  a  U R                   R                  U5      US S & g U R                   R                  U5      US S & g )Nr   )r   ÚmatvecÚrmatvec)r   ÚtransaÚmÚnÚxÚys         r   Ú__call__Ú_AProd.__call__.   s5   € Ø�Q‹;Ø—6‘6—=‘= Ó#ˆA‰a‰Dà—6‘6—>‘> !Ó$ˆA‰a‰Dó    c                 ó.   • U R                   R                  $ r   )r   Úshape©r   s    r   r'   Ú_AProd.shape4   s   € à�v‰v�|‰|Ðr%   c                 óð   •  U R                   R                  $ ! [         aS    U R                   R                  [        R
                  " U R                   R                  S   5      5      R                  s $ f = f)Nr   )r   ÚdtypeÚAttributeErrorr   r   Úzerosr'   r(   s    r   r+   Ú_AProd.dtype8   sU   € ð	BØ—6‘6—<‘<ÐøÜó 	BØ—6‘6—=‘=¤§¢¨$¯&©&¯,©,°q©/Ó!:Ó;×AÑAÒAð	Bús   ‚ ˜AA5Á4A5)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r#   Úpropertyr'   r+   Ú__static_attributes__© r%   r   r   r   !   s;   † ñò5ò%ð ñó ðð ñBó óBr%   r   c                 ó„  • Uc  [        S5      eUR                  5       nUS;  a  [        S5      eU(       d  US:X  a  [        S5      e[        U 5      nUR                  R                  n [
        U   n[        U   nUR                  u  nnUS:  d  U[        UU5      :”  a  [        S5      eUc  SU-  nUc  Sn[        US-   US-   U5      nXA:  a  [        SU SU S35      eU(       a  SOSnU(       a  SOSn[        R                  " UUS-   4SUS9n[        R                  " UU4SUS9n[        R                  " USUR                  5       S9n[        R                  " USUR                  5       S9nUcf  UR                  US9USS2S4'   [        R                  " [        R                  " SUS95      (       a!  USS2S4==   SUR                  US9-  -  ss'   O
 UUSS2S4'   U
c4  [        R                   " [        R"                  " U5      R$                  5      n
Uc#  [        R"                  " U5      R$                  S-  nU(       a]  [        R&                  " X«XÏ4UR                  5       S9nUc  XA-
  nU[        UU-
  UU5      :”  a  [        S5      eUS:  a  [        S5      eO%[        R&                  " X«U4UR                  5       S9n[        R&                  " [)        [+        U5      5      [)        [+        U5      5      4SS9n Sn!U(       d  U(       aH  UU-   SUS-  -  -   SU-  -   S-   n"U"[-        S US-  -  SU-  -   S-   U![-        UU5      -  5      -  n"S!U-  n#O5UU-   SU-  -   SUS-  -  -   S-   [-        UU-   SU-  S-   5      -   n"SU-  S-   n#[        R                  " U"UR                  5       S9n$[        R                  " U#[        R.                  S9n%[        R                  " SUR                  5       S9n&[        R                  " S[        R.                  S9n'UR1                  5       (       a!  [        R                  " UU-   U-   US9n(U$U(U%4n)OU$U%4n)UR3                  S[        R4                  " [        R6                  5      R,                  S[        R8                  S"9n*U(       a(  U" [:        U   UUUUUUUU	UUUUU/U)QUPU PU&PU'PU*P76 n+OU" UUUUXU	UUUUU/U)QUPU PU&PU'PU*P76 n+U+S:”  a  [=        S#U+ S$35      eU+S:  a  [=        S%U S&U S'35      eUSS2SU24   UUSS2SU24   R?                  5       R@                  U4$ ! [         aI    [        R                  " [        R                  " SUS95      (       a  S	nOS
n[
        U   n[        U   n GN&f = f! [          a    [        SU 35      ef = f)(a4  
Compute the singular value decomposition of a linear operator using PROPACK

Parameters
----------
A : array_like, sparse matrix, or LinearOperator
    Operator for which SVD will be computed.  If `A` is a LinearOperator
    object, it must define both ``matvec`` and ``rmatvec`` methods.
k : int
    Number of singular values/vectors to compute
which : {"LM", "SM"}
    Which singular triplets to compute:
    - 'LM': compute triplets corresponding to the `k` largest singular
            values
    - 'SM': compute triplets corresponding to the `k` smallest singular
            values
    `which='SM'` requires `irl_mode=True`.  Computes largest singular
    values by default.
irl_mode : bool, optional
    If `True`, then compute SVD using IRL (implicitly restarted Lanczos)
    mode.  Default is `True`.
kmax : int, optional
    Maximal number of iterations / maximal dimension of the Krylov
    subspace. Default is ``10 * k``.
compute_u : bool, optional
    If `True` (default) then compute left singular vectors, `u`.
compute_v : bool, optional
    If `True` (default) then compute right singular vectors, `v`.
tol : float, optional
    The desired relative accuracy for computed singular values.
    If not specified, it will be set based on machine precision.
v0 : array_like, optional
    Starting vector for iterations: must be of length ``A.shape[0]``.
    If not specified, PROPACK will generate a starting vector.
full_output : bool, optional
    If `True`, then return sigma_bound.  Default is `False`.
delta : float, optional
    Level of orthogonality to maintain between Lanczos vectors.
    Default is set based on machine precision.
eta : float, optional
    Orthogonality cutoff.  During reorthogonalization, vectors with
    component larger than `eta` along the Lanczos vector will be purged.
    Default is set based on machine precision.
anorm : float, optional
    Estimate of ``||A||``.  Default is ``0``.
cgs : bool, optional
    If `True`, reorthogonalization is done using classical Gram-Schmidt.
    If `False` (default), it is done using modified Gram-Schmidt.
elr : bool, optional
    If `True` (default), then extended local orthogonality is enforced
    when obtaining singular vectors.
min_relgap : float, optional
    The smallest relative gap allowed between any shift in IRL mode.
    Default is ``0.001``.  Accessed only if ``irl_mode=True``.
shifts : int, optional
    Number of shifts per restart in IRL mode.  Default is determined
    to satisfy ``k <= min(kmax-shifts, m, n)``.  Must be
    >= 0, but choosing 0 might lead to performance degradation.
    Accessed only if ``irl_mode=True``.
maxiter : int, optional
    Maximum number of restarts in IRL mode.  Default is ``1000``.
    Accessed only if ``irl_mode=True``.
rng : `numpy.random.Generator`, optional
    Pseudorandom number generator state. When `rng` is None, a new
    `numpy.random.Generator` is created using entropy from the
    operating system. Types other than `numpy.random.Generator` are
    passed to `numpy.random.default_rng` to instantiate a ``Generator``.

Returns
-------
u : ndarray
    The `k` largest (``which="LM"``) or smallest (``which="SM"``) left
    singular vectors, ``shape == (A.shape[0], 3)``, returned only if
    ``compute_u=True``.
sigma : ndarray
    The top `k` singular values, ``shape == (k,)``
vt : ndarray
    The `k` largest (``which="LM"``) or smallest (``which="SM"``) right
    singular vectors, ``shape == (3, A.shape[1])``, returned only if
    ``compute_v=True``.
sigma_bound : ndarray
    the error bounds on the singular values sigma, returned only if
    ``full_output=True``.

Nz:`rng` must be a normalized numpy.random.Generator instance>   r   r   z#`which` must be either 'LM' or 'SM'r   z#`which`='SM' requires irl_mode=Truer   )r+   r   r	   r   z.k must be positive and not greater than m or né
   iè  z3kmax must be greater than or equal to k, but kmax (z) < k (Ú)r
   )Úorderr+   )Úsizey              ð?zv0 must be of length g      è?z0shifts must satisfy k <= min(kmax-shifts, m, n)!zshifts must be >= 0!Úié    é   é   é	   é   é   é   )ÚlowÚhighr;   r+   z#An invariant subspace of dimension z was found.zk=z0 singular triplets did not converge within kmax=z iterations)!Ú
ValueErrorÚupperr   r+   ÚcharÚ_lansvd_irl_dictÚ_lansvd_dictÚKeyErrorr   ÚiscomplexobjÚemptyr'   Úminr-   ÚlowerÚuniformÚsqrtÚfinfoÚepsÚarrayÚintÚboolÚmaxÚint32ÚisupperÚintegersÚiinfoÚint64Úuint64Ú_which_converterr   ÚconjÚT),r   ÚkÚwhichÚirl_modeÚkmaxÚ	compute_uÚ	compute_vÚv0Úfull_outputÚtolÚdeltaÚetaÚanormÚcgsÚelrÚ
min_relgapÚshiftsÚmaxiterÚrngÚaprodÚtypÚ
lansvd_irlÚlansvdr   r    ÚjobuÚjobvÚuÚvÚsigmaÚbndÚdoptionÚioptionÚNBÚlworkÚliworkÚworkÚiworkÚdparmÚiparmÚzworkÚworksÚ	rng_stateÚinfos,                                               r   r   r   @   s  € ðr �{ÜÐUÓVÐVà�K‰K‹M€EØ�LÓ ÜÐ>Ó?Ð?Þ˜ ›ÜÐ>Ó?Ð?ä�1‹I€EØ
�+‰+×
Ñ
€Cð
#Ü% cÑ*ˆ
Ü˜cÑ"ˆð �;‰;�D€A€qØ	ˆA‹�1”s˜1˜a“y“=ÜÐIÓJÐJà�|Ø�!‰tˆØ�Øˆô ˆq�1‰u�a˜!‘e˜TÓ"€DØƒxÜðØ˜˜g a S¨ð+ó,ð 	,ö
 ‰1˜q€DÞ‰1˜q€Dô 	�Š�!�T˜A‘X� c°Ñ5€AÜ
�Š�!�T� #¨SÑ1€AÜ�HŠH�Q˜c¨¯©«Ñ5€EÜ
�(Š(�1˜C s§y¡y£{Ñ
3€Cð
 
�zØ—+‘+ 1�+Ð%ˆŠ!ˆQˆ$‰Ü�?Š?œ2Ÿ8š8 A¨SÑ1×2Ñ2ØŠa�ˆd‹G�r˜CŸK™K¨Q˜KÐ/Ñ/Ñ/‹Gøð	:ØˆAŠa�ˆd‰Gð
 �}Ü—’œŸš ›×)Ñ)Ó*ˆØ
�{Ü�hŠh�s‹m×Ñ 4Ñ'ˆæÜ—(’(˜E¨Ð:À#Ç)Á)Ã+ÑNˆð ‰>Ø‘XˆFØŒs�4˜&‘= ! QÓ'Ó'Üð <ó =ð =à�a‹ZÜÐ3Ó4Ð4ð ô —(’(˜E¨Ð.°c·i±i³kÑBˆä�hŠhœœD ›I›¬¬D°«I«Ð7¸sÑC€Gð 
€Bö –IØ�A‘˜˜$ ™'™	Ñ! A d¡FÑ*¨QÑ.ˆØ”�Q�t˜Q‘w‘Y  4¡Ñ'¨!Ñ+¨R´°A°q³	©\Ó:Ñ:ˆØ�4‘‰à�A‘˜˜$™‘  4¨¡7¡Ñ*¨QÑ.´°Q¸±U¸A¸d¹FÀQ¹JÓ1GÑGˆØ�4‘˜!‘ˆÜ�8Š8�E §¡£Ñ-€DÜ�HŠH�V¤2§8¡8Ñ,€Eô �HŠH�Q˜cŸi™i›kÑ*€EÜ�HŠH�QœbŸh™hÑ'€Eà
‡{�{‡}�}Ü—’˜˜Q™ ™¨SÑ1ˆØ�e˜UÐ"‰à�e�ˆð —‘ ¬¯ª´"·(±(Ó);×)?Ñ)?Ø"#¬2¯9©9ð ð 6€Iö ÙÔ*¨5Ñ1°4Ø  1 f¨a°¸#Ø  E¨3°ð<à49ð<à;Bð<ð "ð<ð $)ð<ð +0ð<ð 2;ò<‰ñ
 �d˜D ! Q¨°°e¸QÀÀsÈAð IØðIØ%ðIØ'.ðIØ05ðIØ7<ðIØ>GòIˆð ˆaƒxÜØ1°$°°{ÐCóEð 	Eà	�‹ÜØ��ð Ø�6˜ð&ó'ð 	'ð ŠQ���ˆU‰8�U˜Aša  ! ˜e™HŸM™M›O×-Ñ-¨sÐ2Ð2øôw ó #ä�?Š?œ2Ÿ8š8 A¨SÑ1×2Ñ2Ø‰CàˆCÜ% cÑ*ˆ
Ü˜cÑ"‹ð#ûôZ ó 	:ÜÐ4°Q°CÐ8Ó9Ð9ð	:ús   Á*U Ç	V& ÕAV#Ö"V#Ö&V?)r   TNTTNFr   NNr   FTgü©ñÒMb`?NNN)Ú__all__Únumpyr   Úscipy.sparse.linalgr   Úscipy.linalgr   Ú r   ÚslansvdÚdlansvdÚclansvdÚzlansvdrJ   Úslansvd_irlÚdlansvd_irlÚclansvd_irlÚzlansvd_irlrI   r^   r   r   r6   r%   r   Ú<module>r—      s£   ðØˆ)€ã å 0Ý $å ð 
×	Ñ	Ø	×	Ñ	Ø	×	Ñ	Ø	×	Ñ	ñ	€ð 
×	Ñ	Ø	×	Ñ	Ø	×	Ñ	Ø	×	Ñ	ñ	Ð ð Ø
ñÐ ÷Bñ Bð> 15ØJKØ8<Ø;?õc3r%   