
    (ph                         S r SSKrSSKJr  SSKJrJr  SSKJ	r	  SSK
Jr  SSKJr  SS	KJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SS
 jrS rS rSS.S jr g)zWThe adaptation of Trust Region Reflective algorithm for a linear
least-squares problem.    N)norm)qrsolve_triangular)lsmr)OptimizeResult   )givens_elimination)EPSstep_size_to_boundfind_active_constraints	in_boundsmake_strictly_feasiblebuild_quadratic_1devaluate_quadraticminimize_quadratic_1dCL_scaling_vectorreflective_transformationprint_header_linearprint_iteration_linearcompute_gradregularized_lsq_operatorright_multiplied_operatorc                    U(       a  UR                  5       nUR                  5       n[        X'XT   5        [        R                  " [        R                  " U5      5      n[
        [        X5      -  [        R                  " U5      -  n	[        R                  " X:  5      u  n
U[        R                  " X5         nXz   n[        R                  " U5      n[        X'5      XU
   '   U$ )a^  Solve regularized least squares using information from QR-decomposition.

The initial problem is to solve the following system in a least-squares
sense::

    A x = b
    D x = 0

where D is diagonal matrix. The method is based on QR decomposition
of the form A P = Q R, where P is a column permutation matrix, Q is an
orthogonal matrix and R is an upper triangular matrix.

Parameters
----------
m, n : int
    Initial shape of A.
R : ndarray, shape (n, n)
    Upper triangular matrix from QR decomposition of A.
QTb : ndarray, shape (n,)
    First n components of Q^T b.
perm : ndarray, shape (n,)
    Array defining column permutation of A, such that ith column of
    P is perm[i]-th column of identity matrix.
diag : ndarray, shape (n,)
    Array containing diagonal elements of D.

Returns
-------
x : ndarray, shape (n,)
    Found least-squares solution.
)copyr	   npabsdiagr
   maxnonzeroix_zerosr   )mnRQTbpermr   copy_Rv
abs_diag_R	thresholdnnsxs               Q/var/www/html/venv/lib/python3.13/site-packages/scipy/optimize/_lsq/trf_linear.pyregularized_lsq_with_qrr.      s    @ FFH
AqTZ(
#Jc!i"&&"44I::j,-DC	"&&
A	A
A#A)A3iLH    c                 8   Sn [        X(U-  -   Xg5      u  pX-
  n[        XU5      * nUSU-  U-  :  a  OUS-  nM8  [        XU5      n[        R                  " US:g  5      (       a2  [        X$U-  U-  -   Xg5      u  p[        XUSS9n	X-
  n[        XU5      * nX+U4$ )z=Find an appropriate step size using backtracking line search.r   g      ?r   rstep)r   r   r   r   anyr   )Agr,   pthetap_dot_glbubalphax_new_stepcost_changeactives                 r-   backtrackingrB   E   s    E
,Q]BCy)!55//  %U3F	vvfk,Q1B-BBK&u"A>y)!55Kr/   c
                 l   [        X-   Xx5      (       a  U$ [        XXx5      u  p[        R                  " U5      nXR	                  [
        5      ==   S-  ss'   Xl-  nXJ-  nXZ-  nX-   n[        XXx5      u  nnSU	-
  U-  nX-  nUS:  a+  [        XXUS9u  nnn[        UUUUUS9u  nnX\U-  -   nXl-  nO[        R                  nXY-  nXI-  n[        XXSS9nU* nUU-  n[        U UXx5      u  nnUU	-  n[        XUUS9u  nn[        UUSU5      u  nnUU-  nUU:  a  UU:  a  U$ UU:  a  UU:  a  U$ U$ )zDSelect the best step according to Trust Region Reflective algorithm.r   r   )s0r   )c)r   )
r   r   r   r   astypeboolr   r   infr   )r,   A_hg_hc_hr7   p_hdr:   r;   r8   p_stridehitsr_hr
x_on_bound
r_stride_ur>   
r_stride_labrF   r_strider_valuep_valueag_hagag_stride_u	ag_strideag_values                                r-   select_stepr`   Z   s   'b5NH
''#,CDb 	A MAOCJ 'zb=MJ e)z)JJA~$SsE1a1q*jA/'(N"G&& LCJA 39G4D	
TB'2r6NK5Kc37DAq/1aEIx)OBWx/	7	w1	r/   )lsmr_maxiterc
                L   U R                   u  p[        X#U5      u  p[        XUSS9nUS:X  ar  [        U SSS9u  nnnUR                  nX:  a0  [
        R                  " U[
        R                  " X-
  U45      45      n[
        R                  " U5      n[        X5      nO1US:X  a+  [
        R                  " X-   5      nSnUc  S	U-  nOUS
:X  a  SnU R                  U5      U-
  n[        U U5      nS[
        R                  " UU5      -  nUnS nS nS nUc  SnU	S:X  a
  [        5         [        U5       GH  n[        UUX45      u  nnUU-  n [        U [
        R                  S9n!U!U:  a  SnU	S:X  a  [!        UUUUU!5        Ub    GO}UU-  n"U"S-  n#US-  n$U$U-  n%[#        U U$5      n&US:X  a*  WR                  U5      WS W& [%        XWU$W   -  UUU#SS9* n'OZUS:X  aT  ['        U&U#5      n(UWS U& W(       a,  S	[        SU!5      -  n)[)        [*        [        SU)U!-  5      5      n[-        U(UU
XwS9S   * n'U$W'-  n*[
        R                  " U*U5      n+U+S:  a  SnS[        SU!5      -
  n,[/        UU&U%U"U*U'U$X4U,5
      n-[1        U UU-5      * nUS:  a  [3        U UUU*U,U+X45      u  nn-nO[        UU--   X4SS9n[        U-5      nU R                  U5      U-
  n[        U U5      nUUU-  :  a  SnS[
        R                  " UU5      -  nGM     Uc  Sn[5        XXES9n.[7        UUUW!U.WS-   UUS9$ )Ng?r2   exacteconomicT)modepivotingr   Fg{Gz?autor1   d      )ordr   )r'   )maxiteratolbtolr   rD   g{Gzt?)rtol)r,   funcost
optimalityactive_masknitstatusinitial_cost)shaper   r   r   Tr   vstackr!   mindotr   r   ranger   r   rI   r   r   r.   r   r   r
   r   r`   r   rB   r   r   )/r5   rW   x_lsqr:   r;   tol
lsq_solverlsmr_tolmax_iterverbosera   r"   r#   r,   r>   QTr$   r&   QTrkr_augauto_lsmr_tolrR   r6   rp   ru   termination_status	step_normr@   	iterationr(   dvg_scaledg_normdiag_hdiag_root_hrN   rK   rJ   rM   lsmr_opetar7   r9   r8   r?   rr   s/                                                  r-   
trf_linearr      s   77DA$U3DAqb4AWd;AtTT5		1bhhqz234AhhqkI	v	czH M	a1AQA1DLIK!|8_	!!Q/2q5hBFF+C<!"a<"9dK#,f6 )RmH!e'1- ffQiCG*1QtWc4+6uF FC6!.sK@GE"1ISf--sCS6\$:;%6679 9C G&&A,Q;!#Cv&&1c3325I)!Q55
 ?#/1aE7B$4 At[ 'q4xqAAJ	EE!HqLAt#!"RVVAq\!w %z !)!>K
&kM"4!# #r/   )T)!__doc__numpyr   numpy.linalgr   scipy.linalgr   r   scipy.sparse.linalgr   scipy.optimizer   r	   commonr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   rB   r`   r    r/   r-   <module>r      sQ      - $ ) 29 9 9 9 90f *1j 37k#r/   