§
    fŠtjZ.  ã                   ó–   — d Z ddlZddlZddlZddlZddlmZm	Z	m
Z
mZmZ ddlmZ ddlmZ g Zd„ Z G d„ d	¦  «        Z	 	 	 	 	 	 dd„ZdS )zTrust-region optimization.é    Né   )Ú_check_unknown_optionsÚ_status_messageÚOptimizeResultÚ_prepare_scalar_functionÚ_call_callback_maybe_halt)ÚHessianUpdateStrategy)Ú
FD_METHODSc                 ó0   ‡ ‡‡— dgŠ‰ €‰d fS ˆˆ ˆfd„}‰|fS )Nr   c                 ó`   •— ‰dxx         dz  cc<    ‰t          j        | ¦  «        g|‰z   ¢R Ž S )Nr   r   )ÚnpÚcopy)ÚxÚwrapper_argsÚargsÚfunctionÚncallss     €€€úY/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/scipy/optimize/_trustregion.pyÚfunction_wrapperz(_wrap_function.<locals>.function_wrapper   s=   ø€ Øˆqˆ	ˆ	Œ	�Q‰ˆ	ˆ	‰	àˆx�œ ™
œ
Ð; l°TÑ&9Ð;Ð;Ð;Ð;ó    © )r   r   r   r   s   `` @r   Ú_wrap_functionr      sO   øøø€ ð ˆS€FØÐØ�tˆ|Ðð<ð <ð <ð <ð <ð <ð <ð
 Ð#Ð#Ð#r   c                   óŠ   — e Zd ZdZdd„Zd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	d„ Z
ed	„ ¦   «         Zd
„ Zd„ ZdS )ÚBaseQuadraticSubproblemaQ  
    Base/abstract class defining the quadratic model for trust-region
    minimization. Child classes must implement the ``solve`` method.

    Values of the objective function, Jacobian and Hessian (if provided) at
    the current iterate ``x`` are evaluated on demand and then stored as
    attributes ``fun``, ``jac``, ``hess``.
    Nc                 ó    — || _         d | _        d | _        d | _        d | _        d | _        d | _        || _        || _        || _	        || _
        d S ©N)Ú_xÚ_fÚ_gÚ_hÚ_g_magÚ_cauchy_pointÚ_newton_pointÚ_funÚ_jacÚ_hessÚ_hessp)Úselfr   ÚfunÚjacÚhessÚhessps         r   Ú__init__z BaseQuadraticSubproblem.__init__(   sU   € ØˆŒØˆŒØˆŒØˆŒØˆŒØ!ˆÔØ!ˆÔØˆŒ	ØˆŒ	ØˆŒ
ØˆŒˆˆr   c                 óž   — | j         t          j        | j        |¦  «        z   dt          j        ||                      |¦  «        ¦  «        z  z   S )Ng      à?)r)   r   Údotr*   r,   ©r(   Úps     r   Ú__call__z BaseQuadraticSubproblem.__call__5   s=   € ØŒx�"œ& ¤¨1Ñ-Ô-Ñ-°µb´f¸QÀÇ
Â
È1ÁÄÑ6NÔ6NÑ0NÑNÐNr   c                 ó\   — | j         €|                      | j        ¦  «        | _         | j         S )z1Value of objective function at current iteration.)r   r$   r   ©r(   s    r   r)   zBaseQuadraticSubproblem.fun8   ó'   € ð Œ7ˆ?Ø—i’i ¤Ñ(Ô(ˆDŒGØŒwˆr   c                 ó\   — | j         €|                      | j        ¦  «        | _         | j         S )z=Value of Jacobian of objective function at current iteration.)r   r%   r   r4   s    r   r*   zBaseQuadraticSubproblem.jac?   r5   r   c                 ó\   — | j         €|                      | j        ¦  «        | _         | j         S )z<Value of Hessian of objective function at current iteration.)r    r&   r   r4   s    r   r+   zBaseQuadraticSubproblem.hessF   s'   € ð Œ7ˆ?Ø—j’j ¤Ñ)Ô)ˆDŒGØŒwˆr   c                 óz   — | j         �|                       | j        |¦  «        S t          j        | j        |¦  «        S r   )r'   r   r   r/   r+   r0   s     r   r,   zBaseQuadraticSubproblem.hesspM   s4   € ØŒ;Ð"Ø—;’;˜tœw¨Ñ*Ô*Ð*å”6˜$œ) QÑ'Ô'Ð'r   c                 óp   — | j         €)t          j                             | j        ¦  «        | _         | j         S )zAMagnitude of jacobian of objective function at current iteration.)r!   ÚscipyÚlinalgÚnormr*   r4   s    r   Újac_magzBaseQuadraticSubproblem.jac_magS   s-   € ð Œ;ÐÝœ,×+Ò+¨D¬HÑ5Ô5ˆDŒKØŒ{Ðr   c                 óF  — t          j        ||¦  «        }dt          j        ||¦  «        z  }t          j        ||¦  «        |dz  z
  }t          j        ||z  d|z  |z  z
  ¦  «        }|t          j        ||¦  «        z   }| d|z  z  }	d|z  |z  }
t          |	|
g¦  «        S )zÄ
        Solve the scalar quadratic equation ``||z + t d|| == trust_radius``.
        This is like a line-sphere intersection.
        Return the two values of t, sorted from low to high.
        é   é   éþÿÿÿ)r   r/   ÚmathÚsqrtÚcopysignÚsorted)r(   ÚzÚdÚtrust_radiusÚaÚbÚcÚsqrt_discriminantÚauxÚtaÚtbs              r   Úget_boundaries_intersectionsz4BaseQuadraticSubproblem.get_boundaries_intersectionsZ   s¦   € õ ŒF�1�a‰LŒLˆØ•”�q˜!‘”ÑˆÝŒF�1�a‰LŒL˜<¨™?Ñ*ˆÝ œI a¨¡c¨A¨a©C°©E¡kÑ2Ô2Ðð •$”-Ð 1°1Ñ5Ô5Ñ5ˆØˆT�Q�q‘S‰\ˆØ�‰T�C‰ZˆÝ�r˜2�hÑÔÐr   c                 ó    — t          d¦  «        ‚)Nz9The solve method should be implemented by the child class)ÚNotImplementedError)r(   rH   s     r   ÚsolvezBaseQuadraticSubproblem.solveq   s   € Ý!ð #4ñ 5ô 5ð 	5r   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   r2   Úpropertyr)   r*   r+   r,   r=   rP   rS   r   r   r   r   r      sÝ   € € € € € ðð ðð ð ð ðOð Oð Oð ðð ñ „Xðð ðð ñ „Xðð ðð ñ „Xðð(ð (ð (ð ðð ñ „Xðð ð  ð  ð.5ð 5ð 5ð 5ð 5r   r   r   ç      ð?ç     @�@ç333333Ã?ç-Cëâ6?FTc                 ó  ‡&— t          |¦  «         |€t          d¦  «        ‚|€|€t          d¦  «        ‚|€t          d¦  «        ‚d|	cxk    rdk     sn t          d¦  «        ‚|dk    rt          d¦  «        ‚|dk    rt          d	¦  «        ‚||k    rt          d
¦  «        ‚t          j        |¦  «                             ¦   «         }t          | |||||¬¦  «        Š&‰&j        } ‰&j        }t          |¦  «        r‰&j
        }nEt          |¦  «        rn5|t          v st          |t          ¦  «        rd}ˆ&fd„}nt          d¦  «        ‚t          ||¦  «        \  }}|€t          |¦  «        dz  }d}|}|}|r|g}i }t!          |d¦  «        r||d<    ||| |||fi |¤Ž}d}|j        |
k    �r#	 |                     |¦  «        \  }}n# t          j        j        $ r d}Y nñw xY w ||¦  «        }||z   } ||| |||fi |¤Ž}|j        |j        z
  } |j        |z
  }!|!dk    rd}n®| |!z  }"|"dk     r|dz  }n|"dk    r|rt+          d|z  |¦  «        }|"|	k    r|}|}|r'|                     t          j        |¦  «        ¦  «         |dz  }t1          ||j        ¬¦  «        }#t3          ||#¦  «        rn#|j        |
k     rd}n||k    rd}n|j        |
k    �°#t4          d         t4          d         ddf}$|rº|dk    rt7          |$|         ¦  «         n"t9          j        |$|         t<          d¬¦  «         t7          d|j        d›�¦  «         t7          d|d›�¦  «         t7          d‰&j        d›�¦  «         t7          d‰&j         d›�¦  «         t7          d‰&j!        |d         z   d›�¦  «         t1          ||dk    ||j        |j"        ‰&j        ‰&j         ‰&j!        |d         z   ||$|         ¬ ¦
  «
        }%|�
|j
        |%d!<   |r||%d"<   |%S )#aú  
    Minimization of scalar function of one or more variables using a
    trust-region algorithm.

    Options for the trust-region algorithm are:
        initial_trust_radius : float
            Initial trust radius.
        max_trust_radius : float
            Never propose steps that are longer than this value.
        eta : float
            Trust region related acceptance stringency for proposed steps.
        gtol : float
            Gradient norm must be less than `gtol`
            before successful termination.
        maxiter : int
            Maximum number of iterations to perform.
        disp : bool
            If True, print convergence message.
        inexact : bool
            Accuracy to solve subproblems. If True requires less nonlinear
            iterations, but more vector products. Only effective for method
            trust-krylov.
        workers : int, map-like callable, optional
            A map-like callable, such as `multiprocessing.Pool.map` for evaluating
            any numerical differentiation in parallel.
            This evaluation is carried out as ``workers(fun, iterable)``.
            Only for 'trust-krylov', 'trust-ncg'.

            .. versionadded:: 1.16.0
        subproblem_maxiter : int, optional
            Maximum number of iterations to perform per subproblem. Only affects
            trust-exact. Default is 25.

            .. versionadded:: 1.17.0


    This function is called by the `minimize` function.
    It is not supposed to be called directly.
    Nz7Jacobian is currently required for trust-region methodsz_Either the Hessian or the Hessian-vector product is currently required for trust-region methodszBA subproblem solving strategy is required for trust-region methodsr   g      Ð?zinvalid acceptance stringencyz%the max trust radius must be positivez)the initial trust radius must be positivez?the initial trust radius must be less than the max trust radius)r*   r+   r   Úworkersc                 óT   •— ‰                      | ¦  «                             |¦  «        S r   )r+   r/   )r   r1   r   Úsfs      €r   r,   z%_minimize_trust_region.<locals>.hesspÔ   s   ø€ Ø—7’7˜1‘:”:—>’> !Ñ$Ô$Ð$r   éÈ   ÚMAXITER_DEFAULTÚmaxiteré   r?   g      è?r   )r   r)   Úsuccessz:A bad approximation caused failure to predict improvement.z3A linalg error occurred, such as a non-psd Hessian.)Ú
stacklevelz!         Current function value: Úfz         Iterations: rG   z         Function evaluations: z         Gradient evaluations: z         Hessian evaluations: )
r   re   Ústatusr)   r*   ÚnfevÚnjevÚnhevÚnitÚmessager+   Úallvecs)#r   Ú
ValueErrorÚ	Exceptionr   ÚasarrayÚflattenr   r)   ÚgradÚcallabler+   r
   Ú
isinstancer	   r   ÚlenÚhasattrr=   rS   r;   ÚLinAlgErrorÚminÚappendr   r   r   r   ÚprintÚwarningsÚwarnÚRuntimeWarningri   Úngevrk   r*   )'r)   Úx0r   r*   r+   r,   Ú
subproblemÚinitial_trust_radiusÚmax_trust_radiusÚetaÚgtolrc   ÚdispÚ
return_allÚcallbackÚinexactr^   Úsubproblem_maxiterÚunknown_optionsÚnhesspÚwarnflagrH   r   rn   Úsubproblem_init_kwÚmÚkr1   Úhits_boundaryÚpredicted_valueÚ
x_proposedÚ
m_proposedÚactual_reductionÚpredicted_reductionÚrhoÚintermediate_resultÚstatus_messagesÚresultr`   s'                                         @r   Ú_minimize_trust_regionr›   v   sq  ø€ õZ ˜?Ñ+Ô+Ð+à
€{Ýð #ñ $ô $ð 	$à€|˜˜Ýð Jñ Kô Kð 	KàÐÝð 0ñ 1ô 1ð 	1à�ˆOˆOŠOˆO�tŠOˆOˆOˆOÝÐ7Ñ8Ô8Ð8Ø˜1ÒÐÝÐ?Ñ@Ô@Ð@Ø˜qÒ Ð ÝÐDÑEÔEÐEØÐ/Ò/Ð/Ýð ,ñ -ô -ð 	-õ 
Œ�B‰Œ×	Ò	Ñ	!Ô	!€Bõ 
"ØˆR�S˜t¨$¸ð
ñ 
ô 
€Bð Œ&€CØ
Œ'€CÝ��~„~ð KØŒwˆˆÝ	�%‰Œð Kð 	Ø
•*Ð
Ð
¥
¨4Õ1FÑ GÔ GÐ
ð ˆð	%ð 	%ð 	%ð 	%ð 	%ð 	%õ ð Jñ Kô Kð 	Kõ # 5¨$Ñ/Ô/�M€FˆEð €Ý�b‘'”'˜#‘+ˆð €Hð (€LØ
€AØð Ø�#ˆàÐÝˆzÐ,Ñ-Ô-ð ;Ø(:Ð˜9Ñ%àˆ
�1�c˜3  eÐBÐBÐ/AÐBÐB€AØ	€Að Œ)�tÒ
Ñ
ð	Ø Ÿwšw |Ñ4Ô4ÑˆAˆ}ˆ}øÝŒyÔ$ð 	ð 	ð 	ØˆHØˆEð	øøøð
 ˜!˜A™$œ$ˆð ˜‘Uˆ
Ø�Z 
¨C°°d¸EÐXÐXÐEWÐXÐXˆ
ð œ5 :¤>Ñ1ÐØœe oÑ5ÐØ !Ò#Ð#ØˆHØØÐ!4Ñ4ˆð �Š:ˆ:Ø˜DÑ ˆLˆLØ�4ŠZˆZ˜MˆZÝ˜q ™~Ð/?Ñ@Ô@ˆLð �Š9ˆ9ØˆAØˆAð ð 	'Ø�NŠN�2œ7 1™:œ:Ñ&Ô&Ð&Ø	ˆQ‰ˆå,¨q°a´eÐ<Ñ<Ô<ÐÝ$ XÐ/BÑCÔCð 	Øð Œ9�tÒÐØˆHØð �Š<ˆ<ØˆHØðo Œ)�tÒ
Ñ
õv ˜IÔ&Ý˜IÔ&ØHØAð	€Oð ð 	HØ�qŠ=ˆ=Ý�/ (Ô+Ñ,Ô,Ð,Ð,åŒM˜/¨(Ô3µ^ÐPQÐRÑRÔRÐRÝÐ;°!´%Ð;Ð;Ð;Ñ<Ô<Ð<ÝÐ+ aÐ+Ð+Ð+Ñ,Ô,Ð,ÝÐ;°´Ð;Ð;Ð;Ñ<Ô<Ð<ÝÐ;°´Ð;Ð;Ð;Ñ<Ô<Ð<ÝÐF¨r¬w¸À¼Ñ/BÐFÐFÐFÑGÔGÐGå˜a¨(°aª-ÀØ !¤¨1¬5°r´wÀRÄWØ!#¤¨6°!¬9Ñ!4¸!Ø$3°HÔ$=ð?ñ ?ô ?€Fð
 ÐØœˆˆv‰àð $Ø#ˆˆyÑà€Ms   Æ-G ÇGÇG)r   NNNNrY   rZ   r[   r\   NFFNTNN)rW   rB   r|   Únumpyr   Úscipy.linalgr:   Ú	_optimizer   r   r   r   r   Ú'scipy.optimize._hessian_update_strategyr	   Ú(scipy.optimize._differentiable_functionsr
   Ú__all__r   r   r›   r   r   r   ú<module>r¢      s!  ðØ  Ð  Ø €€€Ø €€€à Ð Ð Ð Ø Ð Ð Ð ð3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð JÐ IÐ IÐ IÐ IÐ IØ ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø
€ð$ð $ð $ðU5ð U5ð U5ð U5ð U5ñ U5ô U5ð U5ðp IMØADØCGØ@EØ@DØ.2ðSð Sð Sð Sð Sð Sr   