§
    fŠtjÚ  ã                   ó¶   — d Z ddlZddlmZ ddlmZmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ dd„Zd„ Zd„ Zddœd„Z dS )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_operatorTc                 ó  — |r|                      ¦   «         }|                      ¦   «         }t          ||||         ¦  «         t          j        t          j        |¦  «        ¦  «        }t
          t          | |¦  «        z  t          j        |¦  «        z  }	t          j        ||	k    ¦  «        \  }
|t          j        |
|
¦  «                 }||
         }t          j	        |¦  «        }t          ||¦  «        |||
         <   |S )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               ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/scipy/optimize/_lsq/trf_linear.pyÚregularized_lsq_with_qrr.      sÒ   € ð@ ð Ø�FŠF‰HŒHˆØ�Š‰
Œ
€Aå�q˜!˜T $œZÑ(Ô(Ð(å”�œ ™
œ
Ñ#Ô#€JÝ•c˜!˜Q‘i”i‘¥"¤&¨Ñ"4Ô"4Ñ4€IÝŒ:�j 9Ò,Ñ-Ô-�D€Cà	�"Œ&��cÑ
Ô
Ô€AØ	ˆ#Œ€Aå
Œ�‰Œ€AÝ# A qÑ)Ô)€A€dˆ3„i�Là€Hó    c                 óz  — d}	 t          |||z  z   ||¦  «        \  }	}
|	|z
  }t          | ||¦  «         }|d|z  |z  k    rn|dz  }ŒDt          |	||¦  «        }t          j        |dk    ¦  «        rGt          |||z  |z  z   ||¦  «        \  }	}
t          |	||d¬¦  «        }	|	|z
  }t          | ||¦  «         }|||fS )z=Find an appropriate step size using backtracking line search.r   Tgš™™™™™¹¿ç      à?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ÔC‰ˆˆqØ�q‰yˆÝ)¨!¨Q°Ñ5Ô5Ð5ˆØ˜ ™¨Ñ/Ò/Ð/ØØ�‰ˆðõ % U¨B°Ñ3Ô3€FÝ	„vˆf˜ŠkÑÔð 6Ý,¨Q°¸±ÀÑ1BÑ-BÀBÈÑKÔK‰ˆˆqÝ& u¨b°"¸AÐ>Ñ>Ô>ˆØ�q‰yˆÝ)¨!¨Q°Ñ5Ô5Ð5ˆàˆd�KÐÐr/   c
                 óô  — t          | |z   ||¦  «        r|S t          | |||¦  «        \  }
}t          j        |¦  «        }||                     t
          ¦  «        xx         dz  cc<   ||z  }||
z  }||
z  }| |z   }t          ||||¦  «        \  }}d|	z
  |z  }||	z  }|dk    r=t          |||||¬¦  «        \  }}}t          |||||¬¦  «        \  }}|||z  z   }||z  }nt          j        }||	z  }||	z  }t          ||||¬¦  «        }| }||z  }t          | |||¦  «        \  }}||	z  }t          ||||¬¦  «        \  }}t          ||d|¦  «        \  }}||z  }||k     r||k     r|S ||k     r||k     r|S |S )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þ  € å��Q‘˜˜BÑÔð Øˆå'¨¨1¨b°"Ñ5Ô5�N€HˆdÝ
Œ'�#‰,Œ,€CØˆ�Š•DÑÔÐÐÔ˜bÑ ÐÐÑØ	ˆC‰€Að ˆ�M€AØˆ8�O€CØ�Q‘€Jõ ' z°1°b¸"Ñ=Ô=�M€J�ð �e‘)˜zÑ)€JØ�%Ñ€Jà�A‚~€~Ý$ S¨#¨s°sÀÐEÑEÔE‰ˆˆ1ˆaÝ1Øˆq�*˜j¨Að/ñ /ô /Ñˆ�'à�C˜(‘NÑ"ˆØ�‰Gˆˆå”&ˆð ˆ5�L€CØˆ�J€AÝ   c¨3°SÐ9Ñ9Ô9€Gàˆ4€DØ	
ˆT‰€BÝ'¨¨2¨r°2Ñ6Ô6�N€K�Ø�5Ñ€KÝ˜c 3¨°3Ð7Ñ7Ô7�D€A€qÝ/°°1°a¸ÑEÔEÑ€IˆxØˆ)�O€Bà�ÒÐ˜W xÒ/Ð/ØˆØ	�7Ò	Ð	˜w¨Ò1Ð1Øˆàˆ	r/   )Úlsmr_maxiterc
                óH  — | j         \  }}t          |||¦  «        \  }}t          |||d¬¦  «        }|dk    rut          | dd¬¦  «        \  }}}|j        }||k     r-t          j        |t          j        ||z
  |f¦  «        f¦  «        }t          j        |¦  «        }t          ||¦  «        }n/|dk    r)t          j        ||z   ¦  «        }d}|€d	|z  }n|d
k    rd}|  	                    |¦  «        |z
  }t          | |¦  «        }dt          j	        ||¦  «        z  }|}d }d }d }|€d}|	dk    rt          ¦   «          t          |¦  «        D �]&}t          ||||¦  «        \  }}||z  } t          | t
          j        ¬¦  «        }!|!|k     rd}|	dk    rt!          |||||!¦  «         |� �nÊ||z  }"|"dz  }#|dz  }$|$|z  }%t#          | |$¦  «        }&|dk    r;| 	                    |¦  «        |d |…<   t%          ||||$|         z  |||#d¬¦  «         }'ns|dk    rmt'          |&|#¦  «        }(||d |…<   |r9d	t          d|!¦  «        z  })t)          t*          t          d|)|!z  ¦  «        ¦  «        }t-          |(||
||¬¦  «        d          }'|$|'z  }*t          j	        |*|¦  «        }+|+dk    rd}dt          d|!¦  «        z
  },t/          ||&|%|"|*|'|$|||,¦
  «
        }-t1          | ||-¦  «         }|dk     rt3          | |||*|,|+||¦  «        \  }}-}nt          ||-z   ||d¬¦  «        }t          |-¦  «        }|  	                    |¦  «        |z
  }t          | |¦  «        }|||z  k     rd}dt          j	        ||¦  «        z  }�Œ(|€d}t5          ||||¬¦  «        }.t7          ||||!|.|dz   ||¬¦  «        S )Ngš™™™™™¹?r2   ÚexactÚeconomicT)ÚmodeÚpivotingr   Fg{®Gáz„?Úautor1   éd   é   )Úordr   )r'   )ÚmaxiterÚatolÚbtolr   rD   g{®Gázt?)Ú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‘   Ž   sg  € àŒ7�D€A€qÝ$ U¨B°Ñ3Ô3�D€A€qÝ˜q " b°Ð4Ñ4Ô4€Aà�WÒÐÝ˜ °dÐ;Ñ;Ô;‰ˆˆAˆtØŒTˆàˆqŠ5ˆ5Ý”	˜1�bœh¨¨A©¨q zÑ2Ô2Ð3Ñ4Ô4ˆAåŒh�q‰kŒkˆÝ��1‰IŒIˆˆØ	�vÒ	Ð	Ý”˜˜Q™‘”ˆØˆØÐØ˜c‘zˆHˆHØ˜ÒÐØ ˆMà	�Šˆa‰Œ�1‰€AÝ�Q˜ÑÔ€AØ•”˜˜1‘”Ñ€DØ€LàÐØ€IØ€KàÐØˆà�!‚|€|ÝÑÔÐå˜8‘_”_ð ;"ñ ;"ˆ	Ý! ! Q¨¨BÑ/Ô/‰ˆˆ2Ø�q‘5ˆÝ�h¥B¤FÐ+Ñ+Ô+ˆØ�CŠ<ˆ<Ø!"Ðà�aŠ<ˆ<Ý" 9¨d°KØ#,¨fñ6ô 6ð 6ð Ð)Ø‰Eà�R‘ˆØ ‘mˆØ�‰HˆØ�!‰eˆå'¨¨1Ñ-Ô-ˆØ˜Ò Ð Ø—f’f˜Q‘i”iˆC���‰GÝ*¨1¨a°°Q°t´W±¸cÀ4Ø+6¸uðFñ Fô Fð FˆCˆCà˜6Ò!Ð!Ý.¨s°KÑ@Ô@ˆGØˆE�"�1�"‰IØð <Ø�S  fÑ-Ô-Ñ-�Ý�s¥C¨¨S°6©\Ñ$:Ô$:Ñ;Ô;�Ý˜ °Ø%¨Hð6ñ 6ô 6Ø67ô9ð 9ˆCð �‰Gˆå”&˜˜A‘,”,ˆØ�QŠ;ˆ;Ø!#Ðà•C˜˜vÑ&Ô&Ñ&ˆÝ˜1˜c 3¨°°3¸¸2¸rÀ5ÑIÔIˆÝ)¨!¨Q°Ñ5Ô5Ð5ˆð
 ˜Š?ˆ?Ý#/Ø�1�a˜˜E 7¨B°ñ$4ô $4Ñ ˆAˆt�[�[õ ' q¨4¡x°°R¸qÐAÑAÔAˆAå˜‘J”Jˆ	Ø�EŠE�!‰HŒH�q‰LˆÝ˜˜AÑÔˆà˜˜t™Ò#Ð#Ø!"Ðà•R”V˜A˜q‘\”\Ñ!ˆ‰àÐ!ØÐå)¨!¨R°¸#Ð>Ñ>Ô>€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š      sˆ  ððð à Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø $Ð $Ð $Ð $Ð $Ð $Ø )Ð )Ð )Ð )Ð )Ð )à 2Ð 2Ð 2Ð 2Ð 2Ð 2ð9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð0ð 0ð 0ð 0ðf ð  ð  ð*1ð 1ð 1ðj 37ðk#ð k#ð k#ð k#ð k#ð k#ð k#r/   