+
    LV-jD1  ã                   óÂ   € ^ RI Ht ^ RIt^ RIHtHtHtHtHtH	t	H
t
HtHtHt ^ RIHt ^ RIHt ^RIHt ^RIHtHt R.t]! R4      RR	 l4       tRR
 ltRR ltRR ltR# )é    )ÚwarnN)
Ú
atleast_2dÚarangeÚ
zeros_likeÚimagÚdiagÚiscomplexobjÚtrilÚtriuÚargsortÚ
empty_like)ÚComplexWarning)Ú_apply_over_batch)Ú_asarray_validated)Úget_lapack_funcsÚ_compute_lworkÚldlc                ó<  € \        \        WR7      4      pVP                  ^ ,          VP                  ^,          8w  d   \        R4      hVP                  ^ 8X  d2   \        V4      \        V4      \        P                  ! . \        R7      3# VP                  ^ ,          p\        V4      '       d   \        M\        pV\        J dM   V'       dE   RRr˜\        P                  ! \        \        V4      4      4      '       d   \        R\         ^R7       MRR	r˜\#        W‰3V34      w  r«\%        W¶VR
7      pV
! W\VVR7      w  rÞpV^ 8  d!   \        VP'                  4        RV)  R24      h\)        WáR
7      w  pp\+        VVWR7      w  pp\-        VVVVR
7      w  ppVVV3# )aÒ  Computes the LDLt or Bunch-Kaufman factorization of a symmetric/
hermitian matrix.

This function returns a block diagonal matrix D consisting blocks of size
at most 2x2 and also a possibly permuted unit lower triangular matrix
``L`` such that the factorization ``A = L D L^H`` or ``A = L D L^T``
holds. If `lower` is False then (again possibly permuted) upper
triangular matrices are returned as outer factors.

The permutation array can be used to triangularize the outer factors
simply by a row shuffle, i.e., ``lu[perm, :]`` is an upper/lower
triangular matrix. This is also equivalent to multiplication with a
permutation matrix ``P.dot(lu)``, where ``P`` is a column-permuted
identity matrix ``I[:, perm]``.

Depending on the value of the boolean `lower`, only upper or lower
triangular part of the input array is referenced. Hence, a triangular
matrix on entry would give the same result as if the full matrix is
supplied.

Parameters
----------
A : array_like
    Square input array
lower : bool, optional
    This switches between the lower and upper triangular outer factors of
    the factorization. Lower triangular (``lower=True``) is the default.
hermitian : bool, optional
    For complex-valued arrays, this defines whether ``A = A.conj().T`` or
    ``A = A.T`` is assumed. For real-valued arrays, this switch has no
    effect.
overwrite_a : bool, optional
    Allow overwriting data in `A` (may enhance performance). The default
    is False.
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
-------
lu : ndarray
    The (possibly) permuted upper/lower triangular outer factor of the
    factorization.
d : ndarray
    The block diagonal multiplier of the factorization.
perm : ndarray
    The row-permutation index array that brings lu into triangular form.

Raises
------
ValueError
    If input array is not square.
ComplexWarning
    If a complex-valued array with nonzero imaginary parts on the
    diagonal is given and hermitian is set to True.

See Also
--------
cholesky, lu

Notes
-----
This function uses ``?SYTRF`` routines for symmetric matrices and
``?HETRF`` routines for Hermitian matrices from LAPACK. See [1]_ for
the algorithm details.

Depending on the `lower` keyword value, only lower or upper triangular
part of the input array is referenced. Moreover, this keyword also defines
the structure of the outer factors of the factorization.

.. versionadded:: 1.1.0

References
----------
.. [1] J.R. Bunch, L. Kaufman, Some stable methods for calculating
   inertia and solving symmetric linear systems, Math. Comput. Vol.31,
   1977. :doi:`10.2307/2005787`

Examples
--------
Given an upper triangular array ``a`` that represents the full symmetric
array with its entries, obtain ``l``, 'd' and the permutation vector `perm`:

>>> import numpy as np
>>> from scipy.linalg import ldl
>>> a = np.array([[2, -1, 3], [0, 2, 0], [0, 0, 1]])
>>> lu, d, perm = ldl(a, lower=0) # Use the upper part
>>> lu
array([[ 0. ,  0. ,  1. ],
       [ 0. ,  1. , -0.5],
       [ 1. ,  1. ,  1.5]])
>>> d
array([[-5. ,  0. ,  0. ],
       [ 0. ,  1.5,  0. ],
       [ 0. ,  0. ,  2. ]])
>>> perm
array([2, 1, 0])
>>> lu[perm, :]
array([[ 1. ,  1. ,  1.5],
       [ 0. ,  1. , -0.5],
       [ 0. ,  0. ,  1. ]])
>>> lu.dot(d).dot(lu.T)
array([[ 2., -1.,  3.],
       [-1.,  2.,  0.],
       [ 3.,  0.,  1.]])

)Úcheck_finitez%The input array "a" should be square.©ÚdtypeÚhetrfÚhetrf_lworkz‡scipy.linalg.ldl():
The imaginary parts of the diagonalare ignored. Use "hermitian=False" for factorization ofcomplex symmetric arrays.)Ú
stacklevelÚsytrfÚsytrf_lwork)Úlower)Úlworkr   Úoverwrite_azB exited with the internal error "illegal value in argument number z0". See LAPACK documentation for the error codes.)r   Ú	hermitian)r   r   ÚshapeÚ
ValueErrorÚsizer   ÚnpÚarrayÚintr	   ÚcomplexÚfloatÚanyr   r   r   r   r   r   ÚupperÚ_ldl_sanitize_ipivÚ_ldl_get_d_and_lÚ_ldl_construct_tri_factor)ÚAr   r    r   r   ÚaÚnÚr_or_cÚsÚslÚsolverÚsolver_lworkr   ÚlduÚpivÚinfoÚswap_arrÚ	pivot_arrÚdÚluÚperms   &&&&&                Úi/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/scipy/linalg/_decomp_ldl.pyr   r      sr  € ô\ 	Ô% aÔCÓD€AØ‡w�wˆq…z�Q—W‘W˜Q•ZÔÜÐ@ÓAÐAà‡v�v�„{Ü˜!‹}œj¨›m¬R¯XªX°bÄÔ-DÐDÐDà	�‰��
€AÜ$ QŸš�W¬U€Fð ”ÓŸYØ˜ˆ2Ü�6Š6”$”t˜A“w“-× Ò Üð -ä.<ÈõLøð ˜ˆ2ä+¨Q¨G°a°TÓ:Ñ€FÜ˜<°%Ô8€EÙ˜A°%Ø(3ô5�N€Cˆdàˆa„xÜ˜AŸG™G›I˜;ð '/Ø04¨u¨gð 60ð0ó 1ð 	1ô -¨SÔ>Ñ€HˆiÜ˜S )°5ÔN�E€A€rÜ(¨¨X°yÈÔN�H€Bˆàˆq�$ˆ;Ðó    c                óö  € V P                   p\        V4      p\        V\        R7      pRpV'       d   ^^ ^ V^3MRRV^,
          RR3w  rgr‰p
\	        W‰V
4       Fœ  pV'       d   RpK  W,          pV^ 8”  d%   WË^,           8w  d   W<^,
          ,          W;&   ^WK&   KB  V^ 8  dK   WÀW¶,           ,          8X  d8   V) V^,           8w  d   W<) ^,
          ,          W;V,           &   ^WKV,           &   RpK“  \        R4      h	  W43# )að  
This helper function takes the rather strangely encoded permutation array
returned by the LAPACK routines ?(HE/SY)TRF and converts it into
regularized permutation and diagonal pivot size format.

Since FORTRAN uses 1-indexing and LAPACK uses different start points for
upper and lower formats there are certain offsets in the indices used
below.

Let's assume a result where the matrix is 6x6 and there are two 2x2
and two 1x1 blocks reported by the routine. To ease the coding efforts,
we still populate a 6-sized array and fill zeros as the following ::

    pivots = [2, 0, 2, 0, 1, 1]

This denotes a diagonal matrix of the form ::

    [x x        ]
    [x x        ]
    [    x x    ]
    [    x x    ]
    [        x  ]
    [          x]

In other words, we write 2 when the 2x2 block is first encountered and
automatically write 0 to the next entry and skip the next spin of the
loop. Thus, a separate counter or array appends to keep track of block
sizes are avoided. If needed, zeros can be filtered out later without
losing the block structure.

Parameters
----------
a : ndarray
    The permutation array ipiv returned by LAPACK
lower : bool, optional
    The switch to select whether upper or lower triangle is chosen in
    the LAPACK call.

Returns
-------
swap_ : ndarray
    The array that defines the row/column swap operations. For example,
    if row two is swapped with row four, the result is [0, 3, 2, 3].
pivots : ndarray
    The array that defines the block diagonal structure as given above.

r   FTznWhile parsing the permutation array in "scipy.linalg.ldl", invalid entries found. The array syntax is invalid.éÿÿÿÿ)r#   r   r   r&   Úranger"   )r/   r   r0   Úswap_ÚpivotsÚskip_2x2ÚxÚyÚrsÚreÚriÚindÚcur_vals   &&           r>   r+   r+   ¡   sÿ   € ð` 	
�‰€AÜ�1‹I€EÜ˜¤SÔ)€FØ€H÷ +0˜˜1˜a  A‘°b¸"¸aÀ½cÀ2ÀrÐ5JÑ€Aˆ"�"ä�R˜RÖ ˆçØˆHÙà•&ˆà�QŒ;Ø˜a�%Ôà"¨1¥9Õ-�‘
ØˆF‹Kà�qŒ[˜W¨#­%­Ô0àˆx˜3˜q�5Ô à$ X¨a¥ZÕ0�˜!•e‘ØˆF�q•5‰MØŠHäð Có Dð Dñ- !ð2 ˆ=Ðr?   c                óˆ  € \        V 4      p\        \        V 4      4      pVP                  ^ ,          p^ pV'       d   RMRw  r‰V'       d   \        V R4      M\	        V ^4      p
\        V4      p^W«V3&   W^ 8g  ,           F¾  pW|,           pV^8X  d«   WV,           Wy,           3,          WWV,           Wy,           3&   V'       d@   V'       d8   WV,           Wy,           3,          P                  4       WWV	,           Wx,           3&   M(WV,           Wy,           3,          WWV	,           Wx,           3&   RW§V,           Wy,           3&   TpKÀ  	  WZ3# )aI  
Helper function to extract the diagonal and triangular matrices for
LDL.T factorization.

Parameters
----------
ldu : ndarray
    The compact output returned by the LAPACK routing
pivs : ndarray
    The sanitized array of {0, 1, 2} denoting the sizes of the pivots. For
    every 2 there is a succeeding 0.
lower : bool, optional
    If set to False, upper triangular part is considered.
hermitian : bool, optional
    If set to False a symmetric complex array is assumed.

Returns
-------
d : ndarray
    The block diagonal matrix.
lu : ndarray
    The upper/lower triangular matrix
g        )é   r   )r   rN   rA   )r	   r   r!   r
   r   r   Úconj)r6   Úpivsr   r    Úis_cr;   r0   Úblk_irF   rG   r<   Ú	diag_indsÚblkÚincs   &&&&          r>   r,   r,   ö   s  € ô0 ˜Ó€DÜŒT�#‹Y‹€AØ	�‰��
€AØ€E÷ ‰6 �D€AçŒˆc�2Œ¤T¨#¨q£\€BÜ�q“	€IØ €B�)ÐÑà˜A‘I�ˆˆð �kˆà�!Œ8Ø"%¨A¥g¨u­wÐ&6Õ"7ˆA�A�g�u•wÐÑ÷ Ÿ	Ø&)°­'°5µ7Ð*:Õ&;×&@Ñ&@Ó&B�˜•'˜5�7Ð"Ò#à&)°­'°5µ7Ð*:Õ&;�˜•'˜5�7Ð"Ñ#à#%ˆB�Q�w˜�ÐÑ ØŠñ ð" ˆ5€Lr?   c                óÎ  € V P                   ^ ,          p\        V4      pV'       d   V^,
          RR3M^ V^3w  rgp\        WgV4       F�  p	W,          p
W©8w  g   K  V'       d   T	M^ pV'       d   TMV	^,           pW),          V'       d   ^ M^8X  d%   Y³'       d   RM^ ,          pYÃ'       d   ^ M^,          pW	V
.W¼13,          W
V	.W¼13&   WYV
.,          WZV	.&   K‘  	  V \        V4      3# )a!  
Helper function to construct explicit outer factors of LDL factorization.

If lower is True the permuted factors are multiplied as L(1)*L(2)*...*L(k).
Otherwise, the permuted factors are multiplied as L(k)*...*L(2)*L(1). See
LAPACK documentation for more details.

Parameters
----------
lu : ndarray
    The triangular array that is extracted from LAPACK routine call with
    ones on the diagonals.
swap_vec : ndarray
    The array that defines the row swapping indices. If the kth entry is m
    then rows k,m are swapped. Notice that the mth entry is not necessarily
    k to avoid undoing the swapping.
pivs : ndarray
    The array that defines the block diagonal structure returned by
    _ldl_sanitize_ipiv().
lower : bool, optional
    The boolean to switch between lower and upper triangular structure.

Returns
-------
lu : ndarray
    The square outer factor which satisfies the L * D * L.T = A
perm : ndarray
    The permutation vector that brings the lu to the triangular form

Notes
-----
Note that the original argument "lu" is overwritten.

rA   )r!   r   rB   r   )r<   Úswap_vecrP   r   r0   r=   rH   rI   rJ   rK   Ús_indÚcol_sÚcol_es   &&&&         r>   r-   r-   .  sÜ   € ðF 	�‰��€AÜ�!‹9€Dç"'�!�A•#�r˜2‘¨a°°A¨Y�J€BˆBä�R˜RÖ ˆØ•ˆØŽ<ç ‘C aˆEß‘A C¨¥EˆEð �y§%™Q¨QÔ/Øžu™¨!Õ+�Øže™¨Õ*�Ø,.°U¨|¸U¸[Ð/HÕ,IˆB�sˆ|˜U˜[Ð(Ñ)Ø!%¨E lÕ!3ˆD˜�Óñ !ð Œw�t‹}ÐÐr?   )r.   é   )TTFT)T)TT)Úwarningsr   Únumpyr$   r   r   r   r   r   r	   r
   r   r   r   Únumpy.exceptionsr   Úscipy._lib._utilr   Ú_decompr   Úlapackr   r   Ú__all__r   r+   r,   r-   © r?   r>   Ú<module>rd      s^   ðÝ ã ÷B÷ B÷ Bå +å .Ý 'ß 4àˆ'€ñ �8ÓóNó ðNôbRôj5öp6r?   