Ë
    âQ(h1*  ã                   óŒ   — 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y)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   ¢­Ž S )Nr   r   )ÚnpÚcopy)ÚxÚwrapper_argsÚargsÚfunctionÚncallss     €€€úY/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/scipy/optimize/_trustregion.pyÚfunction_wrapperz(_wrap_function.<locals>.function_wrapper   s-   ø€ Øˆq‹	�Q‰‹	áœŸ™ ›
Ð; l°TÑ&9Ò;Ð;ó    © )r   r   r   r   s   `` @r   Ú_wrap_functionr      s/   ú€ ð ˆS€FØÐØ�tˆ|Ðö<ð
 Ð#Ð#Ð#r   c                   óp   — 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y)Ú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 | _        || _        || _        || _	        || _
        y ©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__(   sQ   € ØˆŒØˆŒØˆŒØˆŒØˆŒØ!ˆÔØ!ˆÔØˆŒ	ØˆŒ	ØˆŒ
Øˆ�r   c                 ó®   — | j                   t        j                  | j                  |«      z   dt        j                  || j	                  |«      «      z  z   S )Ng      à?)r)   r   Údotr*   r,   ©r(   Úps     r   Ú__call__z BaseQuadraticSubproblem.__call__5   s=   € Ø�x‰xœ"Ÿ&™& §¡¨1Ó-Ñ-°´b·f±f¸QÀÇ
Á
È1ÃÓ6NÑ0NÑNÐNr   c                 ór   — | j                   € | j                  | j                  «      | _         | j                   S )z1Value of objective function at current iteration.)r   r$   r   ©r(   s    r   r)   zBaseQuadraticSubproblem.fun8   ó*   € ð �7‰7ˆ?Ø—i‘i §¡Ó(ˆDŒGØ�w‰wˆr   c                 ór   — | j                   € | 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                 ór   — | j                   € | 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‰7ˆ?Ø—j‘j §¡Ó)ˆDŒGØ�w‰wˆr   c                 ó’   — | j                   �| j                  | j                  |«      S t        j                  | j                  |«      S r   )r'   r   r   r/   r+   r0   s     r   r,   zBaseQuadraticSubproblem.hesspM   s6   € Ø�;‰;Ð"Ø—;‘;˜tŸw™w¨Ó*Ð*ä—6‘6˜$Ÿ)™) QÓ'Ð'r   c                 óŽ   — | j                   €.t        j                  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   s2   € ð �;‰;ÐÜŸ,™,×+Ñ+¨D¯H©HÓ5ˆDŒKØ�{‰{Ðr   c                 óH  — 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‰F�1�a‹LˆØ”—‘�q˜!“ÑˆÜ�F‰F�1�a‹L˜<¨™?Ñ*ˆÜ ŸI™I a¨¡c¨A¨a©C°©E¡kÓ2Ðð ”$—-‘-Ð 1°1Ó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ð 	5r   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   r2   Úpropertyr)   r*   r+   r,   r=   rP   rS   r   r   r   r   r      sq   „ ñóòOð ñó ðð ñó ðð ñó ðò(ð ñó ðò ó.5r   r   c                 ó„  ‡#— t        |«       |€t        d«      ‚|€|€t        d«      ‚|€t        d«      ‚d|	cxk  rdk  st        d«      ‚ t        d«      ‚|dk  rt        d«      ‚|dk  rt        d	«      ‚||k\  rt        d
«      ‚t        j                  |«      j                  «       }t        | ||||¬«      Š#‰#j                  } ‰#j                  }t        |«      r‰#j                  }n7t        |«      rn+|t        v st        |t        «      rd}ˆ#fd„}nt        d«      ‚t        ||«      \  }}|€t        |«      dz  }d}|}|}|r|g} ||| |||«      }d}|j                   |
k\  �r	 |j#                  |«      \  }} ||«      }||z   } ||| |||«      }|j                  |j                  z
  }|j                  |z
  }|dk  rd}n©||z  }|dk  r|dz  }n|dkD  r|rt)        d|z  |«      }||	kD  r|}|}|r$j+                  t        j,                  |«      «       |dz  }t/        ||j                  ¬«      } t1        || «      rn+|j                   |
k  rd}n||k\  rd}n|j                   |
k\  r�Œt2        d   t2        d   ddf}!|r¨|dk(  rt5        |!|   «       nt7        j8                  |!|   t:        d¬«       t5        d|j                  d›�«       t5        d|z  «       t5        d‰#j<                  z  «       t5        d‰#j>                  z  «       t5        d‰#j@                  |d   z   z  «       t/        ||dk(  ||j                  |jB                  ‰#j<                  ‰#j>                  ‰#j@                  |d   z   ||!|   ¬«
      }"|�|j                  |"d<   |r|"d <   |"S # t        j$                  j&                  $ r d}Y �ŒMw xY w)!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.

    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   c                 óD   •— ‰j                  | «      j                  |«      S r   )r+   r/   )r   r1   r   Úsfs      €r   r,   z%_minimize_trust_region.<locals>.hesspÀ   s   ø€ Ø—7‘7˜1“:—>‘> !Ó$Ð$r   éÈ   é   r?   g      è?r   )r   r)   ÚsuccessÚmaxiterz:A bad approximation caused failure to predict improvement.z3A linalg error occurred, such as a non-psd Hessian.)Ú
stacklevelz!         Current function value: Úfz         Iterations: %dz!         Function evaluations: %dz!         Gradient evaluations: %dz          Hessian evaluations: %d)
r   r^   Ústatusr)   r*   ÚnfevÚnjevÚnhevÚnitÚmessager+   Úallvecs)"r   Ú
ValueErrorÚ	Exceptionr   ÚasarrayÚflattenr   r)   ÚgradÚcallabler+   r
   Ú
isinstancer	   r   Úlenr=   rS   r;   ÚLinAlgErrorÚminÚappendr   r   r   r   ÚprintÚwarningsÚwarnÚRuntimeWarningrc   Úngevre   r*   )$r)   Úx0r   r*   r+   r,   Ú
subproblemÚinitial_trust_radiusÚmax_trust_radiusÚetaÚgtolr_   ÚdispÚ
return_allÚcallbackÚinexactÚunknown_optionsÚnhesspÚwarnflagrH   r   rh   Ú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   s6  ø€ ô> ˜?Ô+à
€{Üð #ó $ð 	$à€|˜˜Üð Jó Kð 	KàÐÜð 0ó 1ð 	1à�ŒO�tŠOÜÐ7Ó8Ð8ð ÜÐ7Ó8Ð8Ø˜1ÒÜÐ?Ó@Ð@Ø˜qÒ ÜÐDÓEÐEØÐ/Ò/Üð ,ó -ð 	-ô 
�‰�B‹×	Ñ	Ó	!€Bô 
" # r¨s¸ÀDÔ	I€BØ
�&‰&€CØ
�'‰'€CÜ�„~Ø�w‰w‰Ü	�%Œð 	Ø
”*Ñ
¤
¨4Ô1FÔ Gð ˆõ	%ô ð Jó Kð 	Kô # 5¨$Ó/�M€FˆEð €Ü�b“'˜#‘+ˆð €Hð (€LØ
€AÙØ�#ˆÙ�1�c˜3  eÓ,€AØ	€Að �)‰)�tÓ
ð	Ø Ÿw™w |Ó4ÑˆAˆ}ñ ˜A›$ˆð ˜‘Uˆ
Ù 
¨C°°d¸EÓBˆ
ð Ÿ5™5 :§>¡>Ñ1ÐØŸe™e oÑ5ÐØ !Ò#ØˆHØØÐ!4Ñ4ˆð �Š:Ø˜DÑ ‰LØ�4ŠZ™MÜ˜q ™~Ð/?Ó@ˆLð �Š9ØˆAØˆAñ Ø�N‰Nœ2Ÿ7™7 1›:Ô&Ø	ˆQ‰ˆä,¨q°a·e±eÔ<ÐÜ$ XÐ/BÔCØð �9‰9�tÒØˆHØð �Š<ØˆHØðo �)‰)�tÔ
ôv ˜IÑ&Ü˜IÑ&ØHØAð	€Oñ Ø�qŠ=Ü�/ (Ñ+Õ,ä�M‰M˜/¨(Ñ3´^ÐPQÕRÜÐ1°!·%±%¸°Ð;Ô<ÜÐ'¨!Ñ+Ô,ÜÐ1°B·G±GÑ;Ô<ÜÐ1°B·G±GÑ;Ô<ÜÐ0°B·G±G¸fÀQ¹iÑ4GÑHÔIä˜a¨(°a©-ÀØ !§¡¨1¯5©5°r·w±wÀRÇWÁWØ!#§¡¨6°!©9Ñ!4¸!Ø$3°HÑ$=ô?€Fð
 ÐØŸ™ˆˆv‰áØ#ˆˆyÑà€Møô] �y‰y×$Ñ$ò 	ØˆHÚð	ús   Å+N ÎN?Î>N?)r   NNNNg      ð?g     @�@g333333Ã?g-Cëâ6?NFFNT)rW   rB   ru   Ú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™      sW   ðÙ  Û Û ã Û ÷3õ 3õ JÝ ?Ø
€ò$÷U5ñ U5ðp IMØADØCGØ@EØ26ô	zr   