
    !YHhzJ                     0   d Z ddgZddl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 ddlmZmZmZmZmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZ dZ  e ee!      jD                        Z#d Z$dddddddddddddde#dfdZ%dddddddde#ddfdZ&d Z'd Z(y)a  
This module implements the Sequential Least Squares Programming optimization
algorithm (SLSQP), originally developed by Dieter Kraft.
See http://www.netlib.org/toms/733

Functions
---------
.. autosummary::
   :toctree: generated/

    approx_jacobian
    fmin_slsqp

approx_jacobian
fmin_slsqp    N)slsqp)
zerosarraylinalgappendconcatenatefinfosqrtvstackisfinite
atleast_1d   )OptimizeResult_check_unknown_options_prepare_scalar_function_clip_x_for_func_check_clip_x)approx_derivative)old_bound_to_new_arr_to_scalar)array_namespace)array_api_extrazrestructuredtext enc                 L    t        || d||      }t        j                  |      S )a  
    Approximate the Jacobian matrix of a callable function.

    Parameters
    ----------
    x : array_like
        The state vector at which to compute the Jacobian matrix.
    func : callable f(x,*args)
        The vector-valued function.
    epsilon : float
        The perturbation used to determine the partial derivatives.
    args : sequence
        Additional arguments passed to func.

    Returns
    -------
    An array of dimensions ``(lenf, lenx)`` where ``lenf`` is the length
    of the outputs of `func`, and ``lenx`` is the number of elements in
    `x`.

    Notes
    -----
    The approximation is done using forward differences.

    2-point)methodabs_stepargs)r   np
atleast_2d)xfuncepsilonr   jacs        Q/var/www/html/planif/env/lib/python3.12/site-packages/scipy/optimize/_slsqp_py.pyr   r   $   s*    6 D!I!%'C ==     d   gư>c                   
 ||}||||dk7  ||d}d}|t        
fd|D              z  }|t        
fd|D              z  }|r|d||
dfz  }|r|d||	
dfz  }t        | |
f|||d	|}|r|d
   |d   |d   |d   |d   fS |d
   S )aC  
    Minimize a function using Sequential Least Squares Programming

    Python interface function for the SLSQP Optimization subroutine
    originally implemented by Dieter Kraft.

    Parameters
    ----------
    func : callable f(x,*args)
        Objective function.  Must return a scalar.
    x0 : 1-D ndarray of float
        Initial guess for the independent variable(s).
    eqcons : list, optional
        A list of functions of length n such that
        eqcons[j](x,*args) == 0.0 in a successfully optimized
        problem.
    f_eqcons : callable f(x,*args), optional
        Returns a 1-D array in which each element must equal 0.0 in a
        successfully optimized problem. If f_eqcons is specified,
        eqcons is ignored.
    ieqcons : list, optional
        A list of functions of length n such that
        ieqcons[j](x,*args) >= 0.0 in a successfully optimized
        problem.
    f_ieqcons : callable f(x,*args), optional
        Returns a 1-D ndarray in which each element must be greater or
        equal to 0.0 in a successfully optimized problem. If
        f_ieqcons is specified, ieqcons is ignored.
    bounds : list, optional
        A list of tuples specifying the lower and upper bound
        for each independent variable [(xl0, xu0),(xl1, xu1),...]
        Infinite values will be interpreted as large floating values.
    fprime : callable ``f(x,*args)``, optional
        A function that evaluates the partial derivatives of func.
    fprime_eqcons : callable ``f(x,*args)``, optional
        A function of the form ``f(x, *args)`` that returns the m by n
        array of equality constraint normals. If not provided,
        the normals will be approximated. The array returned by
        fprime_eqcons should be sized as ( len(eqcons), len(x0) ).
    fprime_ieqcons : callable ``f(x,*args)``, optional
        A function of the form ``f(x, *args)`` that returns the m by n
        array of inequality constraint normals. If not provided,
        the normals will be approximated. The array returned by
        fprime_ieqcons should be sized as ( len(ieqcons), len(x0) ).
    args : sequence, optional
        Additional arguments passed to func and fprime.
    iter : int, optional
        The maximum number of iterations.
    acc : float, optional
        Requested accuracy.
    iprint : int, optional
        The verbosity of fmin_slsqp :

        * iprint <= 0 : Silent operation
        * iprint == 1 : Print summary upon completion (default)
        * iprint >= 2 : Print status of each iterate and summary
    disp : int, optional
        Overrides the iprint interface (preferred).
    full_output : bool, optional
        If False, return only the minimizer of func (default).
        Otherwise, output final objective function and summary
        information.
    epsilon : float, optional
        The step size for finite-difference derivative estimates.
    callback : callable, optional
        Called after each iteration, as ``callback(x)``, where ``x`` is the
        current parameter vector.

    Returns
    -------
    out : ndarray of float
        The final minimizer of func.
    fx : ndarray of float, if full_output is true
        The final value of the objective function.
    its : int, if full_output is true
        The number of iterations.
    imode : int, if full_output is true
        The exit mode from the optimizer (see below).
    smode : string, if full_output is true
        Message describing the exit mode from the optimizer.

    See also
    --------
    minimize: Interface to minimization algorithms for multivariate
        functions. See the 'SLSQP' `method` in particular.

    Notes
    -----
    Exit modes are defined as follows:

    - ``-1`` : Gradient evaluation required (g & a)
    - ``0`` : Optimization terminated successfully
    - ``1`` : Function evaluation required (f & c)
    - ``2`` : More equality constraints than independent variables
    - ``3`` : More than 3*n iterations in LSQ subproblem
    - ``4`` : Inequality constraints incompatible
    - ``5`` : Singular matrix E in LSQ subproblem
    - ``6`` : Singular matrix C in LSQ subproblem
    - ``7`` : Rank-deficient equality constraint subproblem HFTI
    - ``8`` : Positive directional derivative for linesearch
    - ``9`` : Iteration limit reached

    Examples
    --------
    Examples are given :ref:`in the tutorial <tutorial-sqlsp>`.

    r   )maxiterftoliprintdispepscallbackr(   c              3   *   K   | ]
  }d |d  yw)eqtypefunr   Nr(   .0cr   s     r&   	<genexpr>zfmin_slsqp.<locals>.<genexpr>   s     IQ448I   c              3   *   K   | ]
  }d |d  yw)ineqr3   Nr(   r6   s     r&   r9   zfmin_slsqp.<locals>.<genexpr>   s     Lq6!T:Lr:   r2   )r4   r5   r%   r   r<   )r%   boundsconstraintsr"   r5   nitstatusmessage)tuple_minimize_slsqp)r#   x0eqconsf_eqconsieqcons	f_ieqconsr=   fprimefprime_eqconsfprime_ieqconsr   iteraccr-   r.   full_outputr$   r0   optsconsress             `          r&   r   r   F   s    ` aK "D D 	EI&IIIDELGLLLD $x  # 	#&>  # 	# $D 4fV&*4.24C3xUSZXINN3xr'   Fc                   HI t        |       |dz
  }|}|
H|	sd}t        |      }t        j                  |j	                  |      d|      }|j
                  }|j                  |j                  d      r|j                  }|j                  |j                  ||      d      }|t        |      dk(  r"t        j                   t        j                  fInt        |      It        j                  |Id   Id         }t        |t               r|f}ddd}t#        |      D ]  \  }}	 |d	   j%                         }|dvrt'        d
|d	    d      d|vrt'        d|z        |j/                  d      }|HIfd} ||d         }||xx   |d   ||j/                  dd      dfz  cc<    dddddddddddd }t1        t3        t        |d!   D cg c]  }t5         |d   |g|d           c}            }t1        t3        t        |d"   D cg c]  }t5         |d   |g|d           c}            }||z   }t7        d|g      j9                         }t        |      } | dz   }!||z
  |!z   |!z   }"d#|!z  |z   |!dz   z  |!|z
  dz   |"d$z   z  z   d$|"z  z   |!|"z   |!|z
  z  z   d$|z  z   |!z   | dz   | z  d$z  z   d$|z  z   d#| z  z   d#|!z  z   dz   }#|"}$t;        |#      }%t;        |$      }&|t        |      dk(  rvt        j<                  | t>        %      }'t        j<                  | t>        %      }(|'jA                  t        jB                         |(jA                  t        jB                         nt7        |D )*cg c]  \  })}*tE        |)      tE        |*      f c}*})t>              }+|+jF                  d   | k7  rtI        d&      t        jJ                  d'(      5  |+dddf   |+dddf   kD  },ddd       ,jM                         r%t'        d)d*jO                  d+ |,D               d,      |+dddf   |+dddf   }(}'tQ        |+       }-t        jB                  |'|-dddf   <   t        jB                  |(|-dddf   <   tS        | |||
I-      }.tU        |.jV                  I      }/tU        |.jX                  I      }0t7        dtZ              }1t7        |t>              }t7        |tZ              }2d}3t7        dt>              }4t7        dt>              }5t7        dt>              }6t7        dt>              }7t7        dt>              }8t7        dt>              }9t7        dt>              }:t7        dt>              };t7        dt>              }<t7        dt>              }=t7        dtZ              }>t7        dtZ              }?t7        dtZ              }@t7        dtZ              }At7        dtZ              }Bt7        dtZ              }!t7        dtZ              }Ct7        dtZ              }D|d$k\  rt]        d.d/z          |/|      }Et_         |0|      d0      }Fta        ||      }tc        |||| |||      }G	 te        g ||||'|(E|FG||2|1|%|&|4|5|6|7|8|9|:|;|<|=|>|?@AB|!CD  |1dk(  r |/|      }Eta        ||      }|1dk(  r#t_         |0|      d0      }Ftc        |||| |||      }G|2|3kD  rQ| |t        jf                  |             |d$k\  r/t]        d1|2|.jh                  Etk        jl                  F      fz         to        |1      dk7  rnt[        |2      }3|dk\  rmt]        |t[        |1         d2z   tq        |1      z   d3z          t]        d4E       t]        d5|2       t]        d6|.jh                         t]        d7|.jr                         tu        |EFdd t[        |2      |.jh                  |.jr                  t[        |1      |t[        |1         |1dk(  8	      S # t(        $ r}t)        d|z        |d}~wt*        $ r}t+        d      |d}~wt,        $ r}t+        d      |d}~ww xY wc c}w c c}w c c}*})w # 1 sw Y   xY w)9a  
    Minimize a scalar function of one or more variables using Sequential
    Least Squares Programming (SLSQP).

    Options
    -------
    ftol : float
        Precision goal for the value of f in the stopping criterion.
    eps : float
        Step size used for numerical approximation of the Jacobian.
    disp : bool
        Set to True to print convergence messages. If False,
        `verbosity` is ignored and set to 0.
    maxiter : int
        Maximum number of iterations.
    finite_diff_rel_step : None or array_like, optional
        If ``jac in ['2-point', '3-point', 'cs']`` the relative step size to
        use for numerical approximation of `jac`. The absolute step
        size is computed as ``h = rel_step * sign(x) * max(1, abs(x))``,
        possibly adjusted to fit into the bounds. For ``method='3-point'``
        the sign of `h` is ignored. If None (default) then step is selected
        automatically.
    r   r   )ndimxpzreal floatingNr(   )r2   r<   r4   zUnknown constraint type 'z'.z"Constraint %d has no type defined.z/Constraints must be defined using a dictionary.z#Constraint's type must be a string.r5   z&Constraint %d has no function defined.r%   c                       fd}|S )Nc                 h    t        |       } dv rt        | |      S t        | d|      S )N)r   z3-pointcs)r   r   rel_stepr=   r   )r   r   r   r=   )r   r   )r"   r   r$   finite_diff_rel_stepr5   r%   
new_boundss     r&   cjacz3_minimize_slsqp.<locals>.cjac_factory.<locals>.cjac,  sT    %a4A::0a$:N8B D D  1a	:A8B D Dr'   r(   )r5   r\   r$   rZ   r%   r[   s   ` r&   cjac_factoryz%_minimize_slsqp.<locals>.cjac_factory+  s    
D 
D r'   r   )r5   r%   r   z$Gradient evaluation required (g & a)z$Optimization terminated successfullyz$Function evaluation required (f & c)z4More equality constraints than independent variablesz*More than 3*n iterations in LSQ subproblemz#Inequality constraints incompatiblez#Singular matrix E in LSQ subproblemz#Singular matrix C in LSQ subproblemz2Rank-deficient equality constraint subproblem HFTIz.Positive directional derivative for linesearchzIteration limit reached)rU   r   r                        	   r2   r<   r_   r^   )dtypezDSLSQP Error: the length of bounds is not compatible with that of x0.ignore)invalidzSLSQP Error: lb > ub in bounds z, c              3   2   K   | ]  }t        |        y w)N)str)r7   bs     r&   r9   z"_minimize_slsqp.<locals>.<genexpr>t  s     )AQ#a&)As   .)r%   r   r$   rZ   r=   z%5s %5s %16s %16s)NITFCOBJFUNGNORMg        z%5i %5i % 16.6E % 16.6Ez    (Exit mode )z#            Current function value:z            Iterations:z!            Function evaluations:z!            Gradient evaluations:)	r"   r5   r%   r?   nfevnjevr@   rA   success);r   r   xpx
atleast_ndasarrayfloat64isdtyperf   reshapeastypelenr    infr   clip
isinstancedict	enumeratelower
ValueErrorKeyError	TypeErrorAttributeErrorgetsummapr   r   maxr   emptyfloatfillnanr   shape
IndexErrorerrstateanyjoinr   r   r   r5   gradintprintr	   _eval_constraint_eval_con_normalsr   copyrr   r   normabsrj   ngevr   )Jr#   rD   r   r%   r=   r>   r+   r,   r-   r.   r/   r0   rZ   unknown_optionsrL   rM   rT   rf   r"   rP   icconctypeer\   r]   
exit_modesr8   meqmieqmlann1mineqlen_wlen_jwwjwxlxulubndsbnderrinfbndsfwrapped_funwrapped_gradmodemajitermajiter_prevalphaf0gsh1h2h3h4tt0toliexactinconsiresetitermxlinen2n3fxgar$   r[   sJ      `        `                                                           @@r&   rC   rC      s<	   8 ?+Q;D
CG 
	B	

2Q2	6BJJE	zz"((O,


299R',A ~V)vvgrvv&
%f-
 	:a=*Q-0A +t$"ob!D[) +9C	NK%%'E N* #<S[M!LMM EJKK wwu~<  E
+D 	UE
 $!$!46 9 	9S+9Z =<<LB;;;JF/
1J c#Dz# #81U8A#:&	#:; # $ %Cs3V& $HAeHQ$;6$;< & ' (D 	d
A	1v			BAA 
QBGbL2ErT!VbdORVAXa001U7:BuHr#v;NNeqS!Ga<(*+A#.01!467d;=>?EFeA	vB ~V)XXau%XXau%

$*, 1a &a(.*;< ,-24::a=A ; < < [[* 	-!Q$Z$q!t*,F	- ::<> $		)A&)A AB!E F FadT!Q$ZB 4.666!Q$<666!Q$< 
"$ss7K)3
5B
 #266:6K#BGGZ8L C=D
U
CD#GL !UOE	q%B	q%B	q%B	q%B	q%B	q%BaA	q%B
5/C1c]F1c]F1c]F1c]FC=D	q#B	q#B	q#B {!$DDE
 
QB|A$AD!A!T2q!S$7A
 	a 	 	a 	 	R 	 	Q 	 	1 	c 	7 	D 	! 	R 					!#	%'	)+	-.	02	47			$	&,	.2	 	 	 	
 19QB D)A2:|A,A!!T2q!S$?A\!#$ {/7BGG35v{{1~3G G H t9>7|; @ {jT#&77#d)CcIJ3R8'11277;1277;A21Sb6s7|!wwRWWSY",SY"7$!)N Nw  	M?"DE1L 	2 * +012 	JABI	Jd#&2,	- 	-sN   )`a"a'; a,
a2	a`**a6aaaa2a<c                 @   |d   r3t        |d   D cg c]  }t         |d   | g|d           c}      }nt        d      }|d   r3t        |d   D cg c]  }t         |d   | g|d           c}      }nt        d      }t        ||f      }|S c c}w c c}w )Nr2   r5   r   r   r<   )r
   r   r   )r"   rP   r   c_eqc_ieqr8   s         r&   r   r     s    Dz'+Dz3 # 'zs5z!'Bc&k'BC 3 4 QxF|(,V6!$ (
E
1(Cs6{(CD 6 7 a 	T5M"AH36s   BBc           
      |   |d   r*t        |d   D cg c]  } |d   | g|d     c}      }nt        ||f      }|d   r*t        |d   D cg c]  } |d   | g|d     c}      }	nt        ||f      }	|dk(  rt        ||f      }
nt        ||	f      }
t        |
t        |dg      fd      }
|
S c c}w c c}w )Nr2   r%   r   r<   r   r   )r   r   r
   )r"   rP   r   r   r   r   r   r   a_eqa_ieqr   s              r&   r   r     s    Dz"&t*. "s5z!2c&k2 . / c1XF|#'<1 #E
13s6{3 1 2 tQi  	Av2q'ND%=!Qr1g'+AH%.1s   B4B9))__doc____all__numpyr    scipy.optimize._slsqpr   r   r   r   r	   r
   r   r   r   r   r   	_optimizer   r   r   r   r   _numdiffr   _constraintsr   r   scipy._lib._array_apir   
scipy._libr   ru   __docformat__r   r/   _epsilonr   r   rC   r   r   r(   r'   r&   <module>r      s    l
+  '7 7 7' ' ( : 1 - &e  !D !#T2T"#6d8	Od $&4 "fQU 4d|N~&r'   