
    (ph                         S SK r S SKrS SKJrJrJrJr  SSKJ	r	  SSK
JrJrJrJrJr  SSKJrJrJrJrJr  SSKJrJrJrJrJrJr       SS jrS	 rS
 rS r S r!S r"S r#S r$g)    N)BoundsLinearConstraintNonlinearConstraintOptimizeResult   )TrustRegion)ObjectiveFunctionBoundConstraintsLinearConstraintsNonlinearConstraintsProblem)MaxEvalErrorTargetSuccessCallbackSuccessFeasibleSuccessexact_1d_array)
ExitStatusOptions	ConstantsDEFAULT_OPTIONSDEFAULT_CONSTANTSPRINT_OPTIONSc                    Uc  0 nO[        U5      nUR                  [        R                  [        [        R                     5      n[        U5      nUR                  [        R                  [        [        R                     5      n	[        U	5      n	UR                  [        R                  [        [        R                     5      n
[        U
5      n
UR                  [        R                  [        [        R                     5      n[        U5      n[        R                  U;   a"  U[        R                     S::  a  [        S5      eUR                  [        R                  [        [        R                     5      n[        U5      n[        R                  U;   a"  U[        R                     S::  a  [        S5      eUR                  [        R                  [        [        R                     5      n[        U5      nUR                  [        R                  [        [        R                     5      n[        U5      n[        U[         5      (       d  U4n[#        XU/UQ76 n[%        US5      (       d  U/n['        U5      n[)        [+        UU5      5      n[-        U5      u  nn[/        UUU5      n[1        UX5      n[3        UUUUUUU	U
UUUU5      n[5        UUR6                  5        [9        S0 UD6nUR:                  R<                  (       d  [?        USS[@        RB                  SU5      $ UR6                  S:X  a  [?        USS[@        RD                  SU5      $ U(       a  [G        S	5        [G        S
U[        RH                      S35        [G        SU[        RJ                      S35        [G        SU[        RL                      S35        [G        SU[        RN                      S35        [G        5          [Q        UUU5      nSnSnSnSnSnSn UU[        RN                     :  a  [@        R`                  nGOUS-  n[b        Rd                  Rk                  URl                  URn                  Rp                  Rr                  -
  5      U[t        Rv                     URx                  -  :  a  UR{                  U5        URx                  nUR}                  U5      u  n n!U U!-   n"[b        Rd                  Rk                  U"5      n#U#U[t        R~                     UR                  -  ::  a  U=Rx                  U[t        R                     -  sl<        UUR                  :  a  SnSnOUS-  nUS-  nU#SUR                  -  :  a  SnUS:  =(       d    US:  n$U$(       a  SnSnSn%GO UR                  5       u  nn&U&[        URx                  U[t        R                     UR                  -  5      :  n%GOUR                  U"5      n'U'(       Gac   [        UUU"U5      u  n(n)n*UR                  URl                  UR                  UR                  UR                  5      n+UR                  URl                  U"-   U(U)U*5      n,UR                  S:X  a  U,U+:  a  [b        Rd                  Rk                  U 5      U[t        R                     S-  URx                  -  :  aM  UR                  U"U5      n-[b        Rd                  Rk                  U-5      S:  a  U"U--  n" [        UUU"U5      u  n(n)n*UR                  U"U(U)U*5      n. UR                  URl                  U"-   5      S   n URn                  R                  UURl                  U"-   U(U)U*5      n/UR                  5         UR                  U"U.5        URx                  UR                  ::  a  U.U[t        R                     :  a  SnOUS-  nURn                  R                  URl                  5      n0 URn                  R                  URl                  5      n1[b        Rd                  Rk                  U05      U[t        R                     [b        Rd                  Rk                  U15      -  :  a  SnUS:  a   URn                  R                  5         SnUR                  URl                  U"-   5         UR                  5       u  nn&U/=(       dT    U.U[t        R                     :*  =(       a7    U&[        URx                  U[t        R                     UR                  -  5      :  n%UUR                  :*  =(       a$    U.U[t        R                     :*  =(       a    U%(       + n$OSn$Sn%U$(       a  UR                  U[        RJ                     ::  a  Sn[@        R                  nGOUR                  U5        UR                  5         U(       a  UR                  URl                  UR                  UR                  5      n2[        SUR                   3UUR                  URl                  5      UR                  U2UR                  U5        [G        5         U%(       ac   UR                  UU5      n" [        UUU"U5      u  n(n)n* URn                  R                  UURl                  U"-   U(U)U*5        UR                  5         GM  [?        UUR                  UUUU5      $ ! [R         a!    [?        USS[@        RT                  SU5      s $ [V         a!    [?        USS[@        RX                  SU5      s $ [Z         a!    [?        USS[@        R\                  SU5      s $ [^         a!    [?        USS[@        R`                  SU5      s $ [b        Rd                  Rf                   a!    [?        USS[@        Rh                  SU5      s $ f = f! [b        Rd                  Rf                   a    [@        Rh                  n GM2  f = f! [R         a    [@        RT                  nSn GMV  [Z         a    [@        R\                  nSn GMu  [V         a    [@        RX                  nSn GM  [^         a    [@        R                  n GM  f = f! [R         a    [@        RT                  nSn GM  [Z         a    [@        R\                  nSn GM  [V         a    [@        RX                  nSn GM  [^         a    [@        R                  n GM0  f = f! [b        Rd                  Rf                   a    [@        Rh                  n GMf  f = f! [b        Rd                  Rf                   a    [@        Rh                  n GM  f = f! [b        Rd                  Rf                   a    [@        Rh                  n GM  f = f! [b        Rd                  Rf                   a    [@        Rh                  n GM  f = f! [b        Rd                  Rf                   a    [@        Rh                  n GM>  f = f! [b        Rd                  Rf                   a    [@        Rh                  n GMt  f = f! [R         a    [@        RT                  nSn GM  [Z         a    [@        R\                  nSn GM  [V         a    [@        RX                  nSn GM  [^         a    [@        R                  n GM  f = f! [b        Rd                  Rf                   a    [@        Rh                  n GM)  f = f)a:  
Minimize a scalar function using the COBYQA method.

The Constrained Optimization BY Quadratic Approximations (COBYQA) method is
a derivative-free optimization method designed to solve general nonlinear
optimization problems. A complete description of COBYQA is given in [3]_.

Parameters
----------
fun : {callable, None}
    Objective function to be minimized.

        ``fun(x, *args) -> float``

    where ``x`` is an array with shape (n,) and `args` is a tuple. If `fun`
    is ``None``, the objective function is assumed to be the zero function,
    resulting in a feasibility problem.
x0 : array_like, shape (n,)
    Initial guess.
args : tuple, optional
    Extra arguments passed to the objective function.
bounds : {`scipy.optimize.Bounds`, array_like, shape (n, 2)}, optional
    Bound constraints of the problem. It can be one of the cases below.

    #. An instance of `scipy.optimize.Bounds`. For the time being, the
       argument ``keep_feasible`` is disregarded, and all the constraints
       are considered unrelaxable and will be enforced.
    #. An array with shape (n, 2). The bound constraints for ``x[i]`` are
       ``bounds[i][0] <= x[i] <= bounds[i][1]``. Set ``bounds[i][0]`` to
       :math:`-\infty` if there is no lower bound, and set ``bounds[i][1]``
       to :math:`\infty` if there is no upper bound.

    The COBYQA method always respect the bound constraints.
constraints : {Constraint, list}, optional
    General constraints of the problem. It can be one of the cases below.

    #. An instance of `scipy.optimize.LinearConstraint`. The argument
       ``keep_feasible`` is disregarded.
    #. An instance of `scipy.optimize.NonlinearConstraint`. The arguments
       ``jac``, ``hess``, ``keep_feasible``, ``finite_diff_rel_step``, and
       ``finite_diff_jac_sparsity`` are disregarded.

    #. A list, each of whose elements are described in the cases above.

callback : callable, optional
    A callback executed at each objective function evaluation. The method
    terminates if a ``StopIteration`` exception is raised by the callback
    function. Its signature can be one of the following:

        ``callback(intermediate_result)``

    where ``intermediate_result`` is a keyword parameter that contains an
    instance of `scipy.optimize.OptimizeResult`, with attributes ``x``
    and ``fun``, being the point at which the objective function is
    evaluated and the value of the objective function, respectively. The
    name of the parameter must be ``intermediate_result`` for the callback
    to be passed an instance of `scipy.optimize.OptimizeResult`.

    Alternatively, the callback function can have the signature:

        ``callback(xk)``

    where ``xk`` is the point at which the objective function is evaluated.
    Introspection is used to determine which of the signatures to invoke.
options : dict, optional
    Options passed to the solver. Accepted keys are:

        disp : bool, optional
            Whether to print information about the optimization procedure.
            Default is ``False``.
        maxfev : int, optional
            Maximum number of function evaluations. Default is ``500 * n``.
        maxiter : int, optional
            Maximum number of iterations. Default is ``1000 * n``.
        target : float, optional
            Target on the objective function value. The optimization
            procedure is terminated when the objective function value of a
            feasible point is less than or equal to this target. Default is
            ``-numpy.inf``.
        feasibility_tol : float, optional
            Tolerance on the constraint violation. If the maximum
            constraint violation at a point is less than or equal to this
            tolerance, the point is considered feasible. Default is
            ``numpy.sqrt(numpy.finfo(float).eps)``.
        radius_init : float, optional
            Initial trust-region radius. Typically, this value should be in
            the order of one tenth of the greatest expected change to `x0`.
            Default is ``1.0``.
        radius_final : float, optional
            Final trust-region radius. It should indicate the accuracy
            required in the final values of the variables. Default is
            ``1e-6``.
        nb_points : int, optional
            Number of interpolation points used to build the quadratic
            models of the objective and constraint functions. Default is
            ``2 * n + 1``.
        scale : bool, optional
            Whether to scale the variables according to the bounds. Default
            is ``False``.
        filter_size : int, optional
            Maximum number of points in the filter. The filter is used to
            select the best point returned by the optimization procedure.
            Default is ``sys.maxsize``.
        store_history : bool, optional
            Whether to store the history of the function evaluations.
            Default is ``False``.
        history_size : int, optional
            Maximum number of function evaluations to store in the history.
            Default is ``sys.maxsize``.
        debug : bool, optional
            Whether to perform additional checks during the optimization
            procedure. This option should be used only for debugging
            purposes and is highly discouraged to general users. Default is
            ``False``.

    Other constants (from the keyword arguments) are described below. They
    are not intended to be changed by general users. They should only be
    changed by users with a deep understanding of the algorithm, who want
    to experiment with different settings.

Returns
-------
`scipy.optimize.OptimizeResult`
    Result of the optimization procedure, with the following fields:

        message : str
            Description of the cause of the termination.
        success : bool
            Whether the optimization procedure terminated successfully.
        status : int
            Termination status of the optimization procedure.
        x : `numpy.ndarray`, shape (n,)
            Solution point.
        fun : float
            Objective function value at the solution point.
        maxcv : float
            Maximum constraint violation at the solution point.
        nfev : int
            Number of function evaluations.
        nit : int
            Number of iterations.

    If ``store_history`` is True, the result also has the following fields:

        fun_history : `numpy.ndarray`, shape (nfev,)
            History of the objective function values.
        maxcv_history : `numpy.ndarray`, shape (nfev,)
            History of the maximum constraint violations.

    A description of the termination statuses is given below.

    .. list-table::
        :widths: 25 75
        :header-rows: 1

        * - Exit status
          - Description
        * - 0
          - The lower bound for the trust-region radius has been reached.
        * - 1
          - The target objective function value has been reached.
        * - 2
          - All variables are fixed by the bound constraints.
        * - 3
          - The callback requested to stop the optimization procedure.
        * - 4
          - The feasibility problem received has been solved successfully.
        * - 5
          - The maximum number of function evaluations has been exceeded.
        * - 6
          - The maximum number of iterations has been exceeded.
        * - -1
          - The bound constraints are infeasible.
        * - -2
          - A linear algebra error occurred.

Other Parameters
----------------
decrease_radius_factor : float, optional
    Factor by which the trust-region radius is reduced when the reduction
    ratio is low or negative. Default is ``0.5``.
increase_radius_factor : float, optional
    Factor by which the trust-region radius is increased when the reduction
    ratio is large. Default is ``numpy.sqrt(2.0)``.
increase_radius_threshold : float, optional
    Threshold that controls the increase of the trust-region radius when
    the reduction ratio is large. Default is ``2.0``.
decrease_radius_threshold : float, optional
    Threshold used to determine whether the trust-region radius should be
    reduced to the resolution. Default is ``1.4``.
decrease_resolution_factor : float, optional
    Factor by which the resolution is reduced when the current value is far
    from its final value. Default is ``0.1``.
large_resolution_threshold : float, optional
    Threshold used to determine whether the resolution is far from its
    final value. Default is ``250.0``.
moderate_resolution_threshold : float, optional
    Threshold used to determine whether the resolution is close to its
    final value. Default is ``16.0``.
low_ratio : float, optional
    Threshold used to determine whether the reduction ratio is low. Default
    is ``0.1``.
high_ratio : float, optional
    Threshold used to determine whether the reduction ratio is high.
    Default is ``0.7``.
very_low_ratio : float, optional
    Threshold used to determine whether the reduction ratio is very low.
    This is used to determine whether the models should be reset. Default
    is ``0.01``.
penalty_increase_threshold : float, optional
    Threshold used to determine whether the penalty parameter should be
    increased. Default is ``1.5``.
penalty_increase_factor : float, optional
    Factor by which the penalty parameter is increased. Default is ``2.0``.
short_step_threshold : float, optional
    Factor used to determine whether the trial step is too short. Default
    is ``0.5``.
low_radius_factor : float, optional
    Factor used to determine which interpolation point should be removed
    from the interpolation set at each iteration. Default is ``0.1``.
byrd_omojokun_factor : float, optional
    Factor by which the trust-region radius is reduced for the computations
    of the normal step in the Byrd-Omojokun composite-step approach.
    Default is ``0.8``.
threshold_ratio_constraints : float, optional
    Threshold used to determine which constraints should be taken into
    account when decreasing the penalty parameter. Default is ``2.0``.
large_shift_factor : float, optional
    Factor used to determine whether the point around which the quadratic
    models are built should be updated. Default is ``10.0``.
large_gradient_factor : float, optional
    Factor used to determine whether the models should be reset. Default is
    ``10.0``.
resolution_factor : float, optional
    Factor by which the resolution is decreased. Default is ``2.0``.
improve_tcg : bool, optional
    Whether to improve the steps computed by the truncated conjugate
    gradient method when the trust-region boundary is reached. Default is
    ``True``.

References
----------
.. [1] J. Nocedal and S. J. Wright. *Numerical Optimization*. Springer Ser.
   Oper. Res. Financ. Eng. Springer, New York, NY, USA, second edition,
   2006. `doi:10.1007/978-0-387-40065-5
   <https://doi.org/10.1007/978-0-387-40065-5>`_.
.. [2] M. J. D. Powell. A direct search optimization method that models the
   objective and constraint functions by linear interpolation. In S. Gomez
   and J.-P. Hennart, editors, *Advances in Optimization and Numerical
   Analysis*, volume 275 of Math. Appl., pages 51--67. Springer, Dordrecht,
   Netherlands, 1994. `doi:10.1007/978-94-015-8330-5_4
   <https://doi.org/10.1007/978-94-015-8330-5_4>`_.
.. [3] T. M. Ragonneau. *Model-Based Derivative-Free Optimization Methods
   and Software*. PhD thesis, Department of Applied Mathematics, The Hong
   Kong Polytechnic University, Hong Kong, China, 2022. URL:
   https://theses.lib.polyu.edu.hk/handle/200/12294.

Examples
--------
To demonstrate how to use `minimize`, we first minimize the Rosenbrock
function implemented in `scipy.optimize` in an unconstrained setting.

.. testsetup::

    import numpy as np
    np.set_printoptions(precision=3, suppress=True)

>>> from cobyqa import minimize
>>> from scipy.optimize import rosen

To solve the problem using COBYQA, run:

>>> x0 = [1.3, 0.7, 0.8, 1.9, 1.2]
>>> res = minimize(rosen, x0)
>>> res.x
array([1., 1., 1., 1., 1.])

To see how bound and constraints are handled using `minimize`, we solve
Example 16.4 of [1]_, defined as

.. math::

    \begin{aligned}
        \min_{x \in \mathbb{R}^2}   & \quad (x_1 - 1)^2 + (x_2 - 2.5)^2\\
        \text{s.t.}                 & \quad -x_1 + 2x_2 \le 2,\\
                                    & \quad x_1 + 2x_2 \le 6,\\
                                    & \quad x_1 - 2x_2 \le 2,\\
                                    & \quad x_1 \ge 0,\\
                                    & \quad x_2 \ge 0.
    \end{aligned}

>>> import numpy as np
>>> from scipy.optimize import Bounds, LinearConstraint

Its objective function can be implemented as:

>>> def fun(x):
...     return (x[0] - 1.0)**2 + (x[1] - 2.5)**2

This problem can be solved using `minimize` as:

>>> x0 = [2.0, 0.0]
>>> bounds = Bounds([0.0, 0.0], np.inf)
>>> constraints = LinearConstraint([
...     [-1.0, 2.0],
...     [1.0, 2.0],
...     [1.0, -2.0],
... ], -np.inf, [2.0, 6.0, 2.0])
>>> res = minimize(fun, x0, bounds=bounds, constraints=constraints)
>>> res.x
array([1.4, 1.7])

To see how nonlinear constraints are handled, we solve Problem (F) of [2]_,
defined as

.. math::

    \begin{aligned}
        \min_{x \in \mathbb{R}^2}   & \quad -x_1 - x_2\\
        \text{s.t.}                 & \quad x_1^2 - x_2 \le 0,\\
                                    & \quad x_1^2 + x_2^2 \le 1.
    \end{aligned}

>>> from scipy.optimize import NonlinearConstraint

Its objective and constraint functions can be implemented as:

>>> def fun(x):
...     return -x[0] - x[1]
>>>
>>> def cub(x):
...     return [x[0]**2 - x[1], x[0]**2 + x[1]**2]

This problem can be solved using `minimize` as:

>>> x0 = [1.0, 1.0]
>>> constraints = NonlinearConstraint(cub, -np.inf, [0.0, 1.0])
>>> res = minimize(fun, x0, constraints=constraints)
>>> res.x
array([0.707, 0.707])

Finally, to see how to supply linear and nonlinear constraints
simultaneously, we solve Problem (G) of [2]_, defined as

.. math::

    \begin{aligned}
        \min_{x \in \mathbb{R}^3}   & \quad x_3\\
        \text{s.t.}                 & \quad 5x_1 - x_2 + x_3 \ge 0,\\
                                    & \quad -5x_1 - x_2 + x_3 \ge 0,\\
                                    & \quad x_1^2 + x_2^2 + 4x_2 \le x_3.
    \end{aligned}

Its objective and nonlinear constraint functions can be implemented as:

>>> def fun(x):
...     return x[2]
>>>
>>> def cub(x):
...     return x[0]**2 + x[1]**2 + 4.0*x[1] - x[2]

This problem can be solved using `minimize` as:

>>> x0 = [1.0, 1.0, 1.0]
>>> constraints = [
...     LinearConstraint(
...         [[5.0, -1.0, 1.0], [-5.0, -1.0, 1.0]],
...         [0.0, 0.0],
...         np.inf,
...     ),
...     NonlinearConstraint(cub, -np.inf, 0.0),
... ]
>>> res = minimize(fun, x0, constraints=constraints)
>>> res.x
array([ 0., -3., -3.])
Nr   z)The size of the history must be positive.z(The size of the filter must be positive.__len__        FTz$Starting the optimization procedure.zInitial trust-region radius: .zFinal trust-region radius: z(Maximum number of function evaluations: zMaximum number of iterations: r   g?      znonlinearly constrained       @zNew trust-region radius:  )cdictgetr   VERBOSEr   boolFEASIBILITY_TOLfloatSCALESTORE_HISTORYHISTORY_SIZE
ValueErrorintFILTER_SIZEDEBUG
isinstancetupler	   hasattrlenr
   _get_bounds_get_constraintsr   r   r   _set_default_optionsn_set_default_constantsboundsis_feasible_build_resultr   INFEASIBLE_ERRORFIXED_SUCCESSprintRHOBEGRHOENDMAX_EVALMAX_ITERr   r   TARGET_SUCCESSr   CALLBACK_SUCCESSr   FEASIBLE_SUCCESSr   MAX_ITER_WARNINGnplinalgLinAlgErrorLINALG_ERRORnormx_bestmodelsinterpolationx_baser   LARGE_SHIFT_FACTORradiusshift_x_baseget_trust_region_stepSHORT_STEP_THRESHOLD
resolutionDECREASE_RESOLUTION_FACTORget_index_to_removemaxRESOLUTION_FACTORincrease_penalty_evalMAX_EVAL_WARNINGmeritfun_bestcub_bestceq_besttypeBYRD_OMOJOKUN_FACTOR get_second_order_correction_stepget_reduction_ratioupdate_interpolationset_best_indexupdate_radiusVERY_LOW_RATIOfun_gradfun_alt_gradLARGE_GRADIENT_FACTORreset_modelsset_multipliers	LOW_RATIORADIUS_SUCCESSenhance_resolutiondecrease_penaltymaxcv_print_stepbuild_xn_evalget_geometry_steppenalty)3funx0argsr7   constraintscallbackoptionskwargsverbosefeasibility_tolscalestore_historyhistory_sizefilter_sizedebugobjn_origlinear_constraintsnonlinear_constraintslinear	nonlinearpb	constants	frameworksuccessn_iterk_newn_short_stepsn_very_short_stepsn_alt_modelsstatusradius_savenormal_steptangential_stepsteps_normrn   improve_geometrydist_newsame_best_pointfun_valcub_valceq_val	merit_old	merit_newsoc_stepratioill_conditionedgradgrad_alt	maxcv_vals3                                                      I/var/www/html/venv/lib/python3.13/site-packages/scipy/_lib/cobyqa/main.pyminimizer   $   s   F w-kk'//?7??+KLG7mGkk//0O O,OKKw}}'EFEKEKK--.M 'Mw&773G3G+HA+MDEE;;,,-L |$Lg%''2E2E*F!*KCDD++++,K k"KKKw}}'EFEKE dE""w
C%
7$
7C 2y!!TWFk&&9:F 1A0M--165AF$%:GKI 


B  "$$'&00I 99  ''
 	
 
$$
 	
 45-ggnn.E-FaHI+GGNN,C+DAFG6w''(),	
 	.ww7G7G/H.IKL3
GY7	j GFEML
 WW--..00F! IINN  9#3#3#A#A#H#HH 5569I9IIJ
 ""7+  &&'0'F'Fw'O$__,% 7789;O;OOP 	)*N*N OOY111 !%&"""a'"C)"6"666)*&!.!!3!N7IQ7N! !%&"#( &/&C&C&EOE8 $,c$$i99:**+/ $  (88>O05!	1-GWg. &OO$$&&&&&&		 &OO$$t+Wgw	 GG88!I-		{3	 > >?3F&&''  )IIg H yy~~h/#5("8= " ) $ '	95GWg. "55	%99!((4/E&/&6&6&K&Ky//$6'O ((* ''e4 ##y';';;	)*B*B CC'($)(//889I9IJ"'0'7'7'D'D ) 0 0(H 99>>$/)%;;3IINN8435 5 ,-L'1,& ) 0 0 = = ? ,-L )))*:*:T*AB&/&C&C&EOE8
 $ 	)*=*= >>  !((!)"="=>#../ !  9#7#77 -9+>+>!??-,, # &+"#(  ##ww~~'>>#22((1&&(HH$$i&8&8):L:L	 /	0D0D/EFJJy//0&&II   225'B,1"iw,O)'$
  55$$t+ $$&y | 
 q
  	
%%
 	
  	
''
 	
  	
''
 	
  	
''
 	
 99   	
##
 	
	
J yy,, '44F( % '66F"G& '88F"G& '88F"G# '88FF  - "%/%>%>F&*G!. "%/%@%@F&*G!. "%/%@%@F&*G!+ "%/%@%@F!"" yy,, '44F yy,, '44F&  "yy44 "%/%<%<F!" $&99#8#8 &)3)@)@ %& yy,, '44Fh 99(( #00 ! #22" #44" #44 #44 99(( #00s&  9k !o o: q9 2!s8 ,t. %u$ v >w x 2x< ,z; (o'o1'o'o;o o.o76o7:q6q69q6q65q69s5s58s5s54s58.t+*t+..u! u!$.vv.ww.xx.x98x9<z8z8;z8z87z8;.{.-{.c                 t   U cS  [        [        R                  " U[        R                  * 5      [        R                  " U[        R                  5      5      $ [	        U [         5      (       ae  U R
                  R                  U4:w  d  U R                  R                  U4:w  a  [        SU S35      e[        U R
                  U R                  5      $ [        U S5      (       aM  [        R                  " U 5      n U R                  US4:w  a  [        S5      e[        U SS2S4   U SS2S4   5      $ [        S	5      e)
z
Uniformize the bounds.
NzThe bounds must have z
 elements.r      zGThe shape of the bounds is not compatible with the number of variables.r   r   zPThe bounds must be an instance of scipy.optimize.Bounds or an array-like object.)r   rE   fullinfr.   lbshapeubr*   r0   asarray	TypeError)r7   r5   s     r   r2   r2   q  s     ~bgga"&&)2771bff+=>>	FF	#	#99??qd"fiioo!&=4QCzBCCfii++		#	#F#<<Aq6!+  fQTlF1a4L11=
 	
    c           
      z   [        U [        5      (       d  [        U S5      (       d  U 4n / n/ nU  GH  n[        U[        5      (       ag  [	        UR
                  S5      n[	        UR                  S5      nUR                  [        UR                  /[        R                  " XE5      Q76 5        M  [        U[        5      (       ag  [	        UR
                  S5      n[	        UR                  S5      nUR                  [        UR                  /[        R                  " XE5      Q76 5        M  [        U[        5      (       al  SU;  d	  US   S;  a  [        S5      eS	U;  d  [        US	   5      (       d  [        S
5      eUR                  US	   US   UR                  SS5      S.5        GM}  [!        S5      e   X4$ )z/
Extract the linear and nonlinear constraints.
r   z;The lower bound of the linear constraints must be a vector.z;The upper bound of the linear constraints must be a vector.z>The lower bound of the nonlinear constraints must be a vector.z>The upper bound of the nonlinear constraints must be a vector.r_   )eqineqz+The constraint type must be "eq" or "ineq".rv   z)The constraint function must be callable.rx   r    )rv   r_   rx   zrThe constraints must be instances of scipy.optimize.LinearConstraint, scipy.optimize.NonlinearConstraint, or dict.)r.   r!   r0   r   r   r   r   appendArE   broadcast_arraysr   rv   r*   callabler"   r   )ry   r   r   
constraintr   r   s         r   r3   r3     s    +t$$GK,K,K"n !
j"233MB  MB %% LL((0 
$788B  B "((#NN((0 
D))Z':f+= F , !!NOOJ&hz%7H.I.I !LMM!((%e,&v.&NN626 ? g "p 44r   c                    [         R                  U ;   a"  U [         R                     S::  a  [        S5      e[         R                  U ;   a"  U [         R                     S:  a  [        S5      e[         R                  U ;   aI  [         R                  U ;   a5  U [         R                     U [         R                     :  a  [        S5      eGO@[         R                  U ;   aZ  [        R
                  " [        [         R                     U [         R                     /5      U [         R                  R                  '   O[         R                  U ;   aZ  [        R                  " [        [         R                     U [         R                     /5      U [         R                  R                  '   Od[        [         R                     U [         R                  R                  '   [        [         R                     U [         R                  R                  '   [        U [         R                     5      U [         R                  R                  '   [        U [         R                     5      U [         R                  R                  '   [         R                  U ;   a"  U [         R                     S::  a  [        S5      e[         R                  U ;   a>  U [         R                     US-   US-   -  S-  :  a  [        S	US-   US-   -  S-   S
35      eU R                  [         R                  R                  [        [         R                     " U5      5        [        U [         R                     5      U [         R                  R                  '   [         R                  U ;   a"  U [         R                     S::  a  [        S5      eU R                  [         R                  R                  [        R                  " [        [         R                     " U5      U [         R                     S-   /5      5        [        U [         R                     5      U [         R                  R                  '   [         R                  U ;   a"  U [         R                     S::  a  [        S5      eU R                  [         R                  R                  [        [         R                     " U5      5        [        U [         R                     5      U [         R                  R                  '   U R                  [         R                  R                  [        [         R                     5        [        U [         R                     5      U [         R                  R                  '   U R                  [         R                   R                  [        [         R                      5        [        U [         R                      5      U [         R                   R                  '   U R                  [         R"                  R                  [        [         R"                     5        [%        U [         R"                     5      U [         R"                  R                  '   U R                  [         R&                  R                  [        [         R&                     5        [%        U [         R&                     5      U [         R&                  R                  '   U R                  [         R(                  R                  [        [         R(                     5        [        U [         R(                     5      U [         R(                  R                  '   U R                  [         R*                  R                  [        [         R*                     5        [%        U [         R*                     5      U [         R*                  R                  '   U R                  [         R,                  R                  [        [         R,                     5        [        U [         R,                     5      U [         R,                  R                  '   U R                  [         R.                  R                  [        [         R.                     5        [%        U [         R.                     5      U [         R.                  R                  '   U  HG  nU[         R0                  R3                  5       ;  d  M'  [4        R6                  " SU S
3[8        S5        MI     g)z
Set the default options.
r   z1The initial trust-region radius must be positive.z2The final trust-region radius must be nonnegative.z_The initial trust-region radius must be greater than or equal to the final trust-region radius.r   z4The number of interpolation points must be positive.r   r   z3The number of interpolation points must be at most r   z<The maximum number of function evaluations must be positive.z2The maximum number of iterations must be positive.zUnknown option: r   N)r   r=   r*   r>   rE   minr   valuerV   r&   NPT
setdefaultr+   r?   r@   TARGETr%   r#   r$   r'   r,   r(   r)   r-   __members__valueswarningswarnRuntimeWarning)r{   r5   keys      r   r4   r4     sY    ~~ WW^^%<%CLMM~~ WW^^%<s%BMNN~~ W^^w%>7>>"WW^^%<<B  =
 
7	"(*/')
$$% 
7	"(*/')
$$% )8(G$$%(7(G$$%$)''..*A$BGGNN  !$)''..*A$BGGNN  !{{g''++"6!"; % & 	& 	wGKK QUq1u$5!#;;AQ1q5!a'(+
 	
 w{{((/'++*Fq*IJ!$WW[[%9!:GGKK7"ww/?/?'@A'EJ
 	
 
 0 01!4$q(	
 '*''2B2B*C&DGG""#7"ww/?/?'@A'EMNN(()!, '*''2B2B*C&DGG""#w~~++_W^^-LM$)''..*A$BGGNN  !%%//0 .3''(.GG##))* w,,ogoo.NO%)''//*B%CGGOO!!"w}}**OGMM,JK#'(>#?GGMM !!++, *-WW5H5H-I)JGG%%&##--. ,08M8M0N+OGG!!''("",,- +.gg6J6J.K*LGG  &&'w}}**OGMM,JK#'(>#?GGMM  g))0022MM,SE3^QG r   c                  |    [        U 5      nUR                  [        R                  R                  [
        [        R                     5        [        U[        R                     5      U[        R                  R                  '   U[        R                     S::  d  U[        R                     S:  a  [        S5      eUR                  [        R                  R                  [
        [        R                     5        [        U[        R                     5      U[        R                  R                  '   U[        R                     S::  a  [        S5      e[        R                  U;   a"  U[        R                     S::  a  [        S5      e[        R                  U;   a"  U[        R                     S::  a  [        S5      e[        R                  U;   aI  [        R                  U;   a5  U[        R                     U[        R                     :  a  [        S5      eGOI[        R                  U;   a`  [        R                  " [
        [        R                     SSU[        R                     -   -  /5      U[        R                  R                  '   O[        R                  U;   a]  [        R                  " [
        [        R                     S	U[        R                     -  /5      U[        R                  R                  '   Od[
        [        R                     U[        R                  R                  '   [
        [        R                     U[        R                  R                  '   UR                  [        R                  R                  [
        [        R                     5        [        U[        R                     5      U[        R                  R                  '   U[        R                     S::  d  U[        R                     S:  a  [        S
5      e[        R                  U;   a"  U[        R                     S::  a  [        S5      e[        R                   U;   a"  U[        R                      S::  a  [        S5      e[        R                  U;   aI  [        R                   U;   a5  U[        R                      U[        R                     :  a  [        S5      eGO@[        R                  U;   aZ  [        R                  " [
        [        R                      U[        R                     /5      U[        R                   R                  '   O[        R                   U;   aZ  [        R                  " [
        [        R                     U[        R                      /5      U[        R                  R                  '   Od[
        [        R                     U[        R                  R                  '   [
        [        R                      U[        R                   R                  '   [        R"                  U;   a9  U[        R"                     S::  d  U[        R"                     S:  a  [        S5      e[        R$                  U;   a9  U[        R$                     S::  d  U[        R$                     S:  a  [        S5      e[        R"                  U;   aI  [        R$                  U;   a5  U[        R"                     U[        R$                     :  a  [        S5      eGO@[        R"                  U;   aZ  [        R                  " [
        [        R$                     U[        R"                     /5      U[        R$                  R                  '   O[        R$                  U;   aZ  [        R                  " [
        [        R"                     U[        R$                     /5      U[        R"                  R                  '   Od[
        [        R"                     U[        R"                  R                  '   [
        [        R$                     U[        R$                  R                  '   UR                  [        R&                  R                  [
        [        R&                     5        [        U[        R&                     5      U[        R&                  R                  '   U[        R&                     S::  d  U[        R&                     S:  a  [        S5      e[        R(                  U;   a"  U[        R(                     S:  a  [        S5      e[        R*                  U;   a"  U[        R*                     S::  a  [        S5      e[        R(                  U;   aI  [        R*                  U;   a5  U[        R*                     U[        R(                     :  a  [        S5      eGO@[        R(                  U;   aZ  [        R                  " [
        [        R*                     U[        R(                     /5      U[        R*                  R                  '   O[        R*                  U;   aZ  [        R                  " [
        [        R(                     U[        R*                     /5      U[        R(                  R                  '   Od[
        [        R(                     U[        R(                  R                  '   [
        [        R*                     U[        R*                  R                  '   UR                  [        R,                  R                  [
        [        R,                     5        [        U[        R,                     5      U[        R,                  R                  '   U[        R,                     S::  d  U[        R,                     S:  a  [        S5      eUR                  [        R.                  R                  [
        [        R.                     5        [        U[        R.                     5      U[        R.                  R                  '   U[        R.                     S::  d  U[        R.                     S:  a  [        S5      eUR                  [        R0                  R                  [
        [        R0                     5        [        U[        R0                     5      U[        R0                  R                  '   U[        R0                     S::  d  U[        R0                     S:  a  [        S5      eUR                  [        R2                  R                  [
        [        R2                     5        [        U[        R2                     5      U[        R2                  R                  '   U[        R2                     S::  a  [        S5      eUR                  [        R4                  R                  [
        [        R4                     5        [        U[        R4                     5      U[        R4                  R                  '   U[        R4                     S:  a  [        S5      eUR                  [        R6                  R                  [
        [        R6                     5        [        U[        R6                     5      U[        R6                  R                  '   U[        R6                     S::  a  [        S5      eUR                  [        R8                  R                  [
        [        R8                     5        [        U[        R8                     5      U[        R8                  R                  '   U[        R8                     S::  a  [        S5      eUR                  [        R:                  R                  [
        [        R:                     5        [=        U[        R:                     5      U[        R:                  R                  '   U  HG  nU[        R>                  RA                  5       ;  d  M'  [B        RD                  " SU S3[F        S5        MI     U$ )z
Set the default constants.
r   g      ?zCThe constant decrease_radius_factor must be in the interval (0, 1).z>The constant increase_radius_threshold must be greater than 1.z;The constant increase_radius_factor must be greater than 1.z>The constant decrease_radius_threshold must be greater than 1.zPThe constant decrease_radius_threshold must be less than increase_radius_factor.g      ?r   zGThe constant decrease_resolution_factor must be in the interval (0, 1).z?The constant large_resolution_threshold must be greater than 1.zBThe constant moderate_resolution_threshold must be greater than 1.zVThe constant moderate_resolution_threshold must be at most large_resolution_threshold.z6The constant low_ratio must be in the interval (0, 1).z7The constant high_ratio must be in the interval (0, 1).z2The constant low_ratio must be at most high_ratio.z;The constant very_low_ratio must be in the interval (0, 1).zKThe constant penalty_increase_threshold must be greater than or equal to 1.z<The constant penalty_increase_factor must be greater than 1.zaThe constant penalty_increase_factor must be greater than or equal to penalty_increase_threshold.zAThe constant short_step_threshold must be in the interval (0, 1).z>The constant low_radius_factor must be in the interval (0, 1).zAThe constant byrd_omojokun_factor must be in the interval (0, 1).z@The constant threshold_ratio_constraints must be greater than 1.z4The constant large_shift_factor must be nonnegative.z:The constant large_gradient_factor must be greater than 1.z6The constant resolution_factor must be greater than 1.zUnknown constant: r   r   )$r!   r   r   DECREASE_RADIUS_FACTORr   r   r&   r*   INCREASE_RADIUS_THRESHOLDINCREASE_RADIUS_FACTORDECREASE_RADIUS_THRESHOLDrE   r   rV   rT   LARGE_RESOLUTION_THRESHOLDMODERATE_RESOLUTION_THRESHOLDrl   
HIGH_RATIOrf   PENALTY_INCREASE_THRESHOLDPENALTY_INCREASE_FACTORrR   LOW_RADIUS_FACTORr`   THRESHOLD_RATIO_CONSTRAINTSrN   ri   rW   IMPROVE_TCGr$   r   r   r   r   r   )r|   r   r   s      r   r6   r6   7  sf    VI((..)::; 9>)2239Ii..445 	)223s:Y556#=
 	
 ++11)==> <A)556<Ii11778 445<L
 	
 	((I5i6673>I
 	
 	++y8i99:cAL
 	
 	((I5//9< i99:99:; 4 ; 
	)	)Y	6?Avv!)"E"EFsYy'G'GHHI@
	)55;;< 
	,	,		9<>FF!)"B"BCi	 C CDD=
	)22889 =N,,=
	)22889 iAAB 	)55;;<,,22)>>? =B)667=Ii22889 	)6673>Y99:cA
 	

 	,,	9i::;sBM
 	
 	//9<i==>#E
 	

 	,,	933y@ i==>	<<=> > > 
	-	-	:CE66!)"I"IJ)>>?D
	)99??@ 
	0	0I	=@B!)"F"FG)AABA
	)66<<= iBBC 	)66<<= iEEF 	)99??@ i')%%&#-Y(()S0D
 	
 y()&&'3.Y))*c1E
 	
 i'I,@,@I,MY(()Ii6J6J,KKD  L 
				)02!)"6"67)--.1
	)&&,,- 
			*/1vv!)"5"56)../0
	)%%++, 0A0
	)%%++, 1B  1
	)&&,,-   &&)223 16)**+1Ii&&,,- 	)**+s2Y--.#5I
 	
 	,,	9i::;cA*
 	

 	))Y6i778C?J
 	
 	,,	9--: i778	<<=> . > 
	-	-	:=?VV!)"C"CD)>>?>
	)3399: 
	*	*i	7@B!)"F"FG);;<A
	)66<<= iBBC 	)66<<= >O-->
	)3399: &&,,)889 7<)0017Ii,,223 	)001S8Y334;O
 	
 ##)))556 49)--.4Ii))//0 	)--.#5Y001S8L
 	
 &&,,)889 7<)0017Ii,,223 	)001S8Y334;O
 	
 --33)??@ >C)778>Ii3399: 6673>N
 	
 $$**)667 5:)../5Ii**001 --.4 ( ) 	)''--)99: 8=)1128Ii--334 001S8H
 	
 ##)))556 49)--.4Ii))//0 ,,-4D
 	
 ##)//0 .2)''(.Ii##))*
 i++2244MM.se15~qI  r   c                    U R                   U[        R                     :  a  [        eUR                  U-   nU " XAR
                  5      u  pVnU R                  XFU5      nXS[        R                     ::  a  X[        R                     ::  a  [        eU R                  (       a  X[        R                     ::  a  [        eXVU4$ )z2
Evaluate the objective and constraint functions.
)rs   r   r?   r   rJ   ru   rp   r   r%   r   is_feasibilityr   )	r   r   r   r{   x_evalr   r   r   r_vals	            r   rY   rY     s     
yyGG,,--$F "6+<+< =GgHHVg.E7>>**W4455	Ug.E.E&FFW$$r   c                 j   U R                  U5      u  pgnU=(       a3    [        R                  " U5      =(       a    [        R                  " U5      nU[        R                  [        R
                  4;  a  U=(       a    X[        R                     :*  n[        5       n	[        R                  S[        R                  S[        R                  S[        R                  S[        R
                  S[        R                  S[        R                  S[        R                  S[        R                  S	0	R!                  US
5      U	l        X)l        UR&                  U	l        U R+                  U5      U	l        Xyl        Xl        U R2                  U	l        XIl        U[        R8                     (       a"  U R:                  U	l        U R<                  U	l        U[        R>                     (       aM  [A        U	R"                  U U	R,                  U	R.                  U	R0                  U	R4                  U	R6                  5        U	$ )z/
Build the result of the optimization process.
z<The lower bound for the trust-region radius has been reachedz4The target objective function value has been reachedz0All variables are fixed by the bound constraintsz9The callback requested to stop the optimization procedurez=The feasibility problem received has been solved successfullyz<The maximum number of function evaluations has been exceededz2The maximum number of iterations has been exceededz$The bound constraints are infeasiblezA linear algebra error occurredzUnknown exit status)!	best_evalrE   isfiniter   rA   rC   r   r%   r   rm   r;   rB   rZ   rD   r:   rH   r"   messager   r   r   rr   xrv   rp   rs   nfevnitr(   fun_historymaxcv_historyr#   rq   )
r   ru   r   r   r   r{   r   rv   rp   results
             r   r9   r9     s   
 LL)MAEA"++c*Ar{{5/AGj//1L1LMMGew/F/F'GGF!! $=!! $2   #0## &>## &@## &E## &5##%K!B!" 
c&'(# N$ NLLFMzz!}FHJL))FKJw$$%^^!// wNNHHJJLLKKJJ	
 Mr   c                 n   [        5         [        U  S35        [        SU S35        [        SU S35        UR                  (       d  [        SUR                   SU S35        [        SU S35        [        R                  " S	0 [
        D6   [        SU S35        SSS5        g! , (       d  f       g= f)
zH
Print information about the current state of the optimization process.
r   z Number of function evaluations: zNumber of iterations: zLeast value of z: zMaximum constraint violation: zCorresponding point: Nr    )r<   r   fun_namerE   printoptionsr   )r   r   r   r   r   rs   r   s          r   rq   rq     s     
G	WIQ-	,VHA
67	"6(!
,-}Bwiq9:	*5'
34		)=	)%aS*+ 
*	)	)s   B&&
B4)r    Nr    NN)%r   numpyrE   scipy.optimizer   r   r   r   r   r   problemr	   r
   r   r   r   utilsr   r   r   r   r   settingsr   r   r   r   r   r   r   r2   r3   r4   r6   rY   r9   rq   r    r   r   <module>r      s{       #    
JZ
2B5JeHPTn
%&2j,r   