
    -i0                     2    S SK rS SKJr   " S S5      rS rg)    Nc                       \ rS rSrSrS r\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       rSrg)CanonicalConstraint   a6  Canonical constraint to use with trust-constr algorithm.

It represents the set of constraints of the form::

    f_eq(x) = 0
    f_ineq(x) <= 0

where ``f_eq`` and ``f_ineq`` are evaluated by a single function, see
below.

The class is supposed to be instantiated by factory methods, which
should prepare the parameters listed below.

Parameters
----------
n_eq, n_ineq : int
    Number of equality and inequality constraints respectively.
fun : callable
    Function defining the constraints. The signature is
    ``fun(x) -> c_eq, c_ineq``, where ``c_eq`` is ndarray with `n_eq`
    components and ``c_ineq`` is ndarray with `n_ineq` components.
jac : callable
    Function to evaluate the Jacobian of the constraint. The signature
    is ``jac(x) -> J_eq, J_ineq``, where ``J_eq`` and ``J_ineq`` are
    either ndarray of csr_array of shapes (n_eq, n) and (n_ineq, n),
    respectively.
hess : callable
    Function to evaluate the Hessian of the constraints multiplied
    by Lagrange multipliers, that is
    ``dot(f_eq, v_eq) + dot(f_ineq, v_ineq)``. The signature is
    ``hess(x, v_eq, v_ineq) -> H``, where ``H`` has an implied
    shape (n, n) and provide a matrix-vector product operation
    ``H.dot(p)``.
keep_feasible : ndarray, shape (n_ineq,)
    Mask indicating which inequality constraints should be kept feasible.
c                 L    Xl         X l        X0l        X@l        XPl        X`l        g N)n_eqn_ineqfunjachesskeep_feasible)selfr   r	   r
   r   r   r   s          j/var/www/html/venv/lib/python3.13/site-packages/scipy/optimize/_trustregion_constr/canonical_constraint.py__init__CanonicalConstraint.__init__*   s!    		*    c                    UR                   u  p#UR                  nUR                  n[        R                  " U[        R
                  * :H  5      (       aG  [        R                  " U[        R
                  :H  5      (       a  U R                  UR                  5      $ [        R                  " U[        R
                  * :H  5      (       aG  [        R                  " U[        R
                  :H  5      (       a  U R                  UR                  5      $ [        R                  " X#:H  5      (       a  U R                  XB5      $ [        R                  " U[        R
                  * :H  5      (       a  U R                  XCU5      $ [        R                  " U[        R
                  :H  5      (       a  U R                  XBU5      $ U R                  XBX55      $ )z5Create an instance from `PreparedConstrained` object.)boundsr
   r   npallinfemptyn_equal_to_canonical_less_to_canonical_greater_to_canonical_interval_to_canonical)cls
constraintlbubcfunr   s         r   from_PreparedConstraint+CanonicalConstraint.from_PreparedConstraint2   s4    ""~~"0066"-  RVVB"&&L%9%999TVV$$66"-  RVVB"&&L%9%999TVV$$VVBH**444VVB266'M""))$MBBVVB"&&L!!,,T}EE--dJJr   c                   ^^^ [         R                  " S5      m[         R                  " SU45      m[        R                  " X45      mU4S jnU4S jnU4S jnU " SSX#U[         R                  " S[         R                  S95      $ )zCreate an "empty" instance.

This "empty" instance is required to allow working with unconstrained
problems as if they have some constraints.
r   c                    > TT4$ r    )x	empty_funs    r   r
   &CanonicalConstraint.empty.<locals>.funR       i''r   c                    > TT4$ r   r'   )r(   	empty_jacs    r   r   &CanonicalConstraint.empty.<locals>.jacU   r+   r   c                    > T$ r   r'   )r(   v_eqv_ineq
empty_hesss      r   r   'CanonicalConstraint.empty.<locals>.hessX   s	    r   dtype)r   r   sps	csr_arraybool_)r   r   r
   r   r   r)   r2   r-   s        @@@r   r   CanonicalConstraint.emptyG   sg     HHQK	HHaV$	]]A6*
	(	(	 1a4!288)DEEr   c                 B  ^^
 U4S jnU(       a  [         R                  m
O[        R                  m
UU
4S jnU4S jn[        S T 5       5      n[        S T 5       5      n[        R                  " T Vs/ s H  oR
                  PM     sn5      n	U " XgX4XY5      $ s  snf )zConcatenate multiple `CanonicalConstraint` into one.

`sparse_jacobian` (bool) determines the Jacobian format of the
concatenated constraint. Note that items in `canonical_constraints`
must have their Jacobians in the same format.
c                    > T(       a*  [        T Vs/ s H  oR                  U 5      PM     sn6 u  p#O/ / p2[        R                  " U5      [        R                  " U5      4$ s  snf r   )zipr
   r   hstack)r(   ceq_allineq_allcanonical_constraintss       r   r
   ,CanonicalConstraint.concatenate.<locals>.fune   s\    $#&,AB,Aq%%(,AB$D  $&r99V$bii&999	 Cs   A"c                    > T(       a*  [        T Vs/ s H  oR                  U 5      PM     sn6 u  p#O/ / p2T" U5      T" U5      4$ s  snf r   )r<   r   )r(   r>   r?   r@   rA   vstacks       r   r   ,CanonicalConstraint.concatenate.<locals>.jacs   sS    $#&,AB,Aq%%(,AB$D  $&r&>6(#333	 Cs   Ac                 P  >^
 / m
SnSnT H`  nXX5R                   -    nX$XER                  -    nT
R                  UR                  XU5      5        X5R                   -  nXER                  -  nMb     U
4S jnU R                  S   n	[
        R                  R                  X4U[        S9$ )Nr   c                 r   > [         R                  " U [        S9nT H  nXR                  U 5      -  nM     U$ )Nr4   )r   
zeros_likefloatdot)presulthhess_alls      r   matvec=CanonicalConstraint.concatenate.<locals>.hess.<locals>.matvec   s2    q6!AeeAh&F "r   r4   )	r   r	   appendr   shaper6   linalgLinearOperatorrI   )r(   r0   r1   index_eq
index_ineqr>   vc_eqvc_ineqrO   r   rN   rA   s             @r   r   -CanonicalConstraint.concatenate.<locals>.hess|   s    HHJ*h&78 J,ABq 9:FF"hh&
 + 
A::,,aVV5,IIr   c              3   8   #    U  H  oR                   v   M     g 7fr   )r   .0r>   s     r   	<genexpr>2CanonicalConstraint.concatenate.<locals>.<genexpr>   s     9#8a66#8   c              3   8   #    U  H  oR                   v   M     g 7fr   )r	   r[   s     r   r]   r^      s     ='<!XX'<r_   )r6   rD   r   sumr=   r   )r   rA   sparse_jacobianr
   r   r   r   r	   r>   r   rD   s    `        @r   concatenateCanonicalConstraint.concatenate]   s    	: ZZFYYF	4	J( 9#899='<==		#8#:#8 89??#8#: ; 44??#:s   6Bc                 ,  ^^^
^ [         R                  " S5      m
TR                  nTR                  S   nSn[         R                  " S[        S9nTR
                  (       a  [        R                  " SU45      mO[         R                  " SU45      mUU
U4S jnUU4S jnU4S jn	[         R                  " S5      m
TR                  nTR
                  (       a  [        R                  " SU45      mO[         R                  " SU45      mU " XEXxX5      $ )Nr   r4   c                 0   > TR                  U 5      T-
  T4$ r   r
   )r(   r"   r)   values    r   r
   4CanonicalConstraint._equal_to_canonical.<locals>.fun   s    88A;&	11r   c                 *   > TR                  U 5      T4$ r   r   r(   r"   r-   s    r   r   4CanonicalConstraint._equal_to_canonical.<locals>.jac   s    88A;	))r   c                 &   > TR                  X5      $ r   r   r(   r0   r1   r"   s      r   r   5CanonicalConstraint._equal_to_canonical.<locals>.hess   s    99Q%%r   )r   r   r   rR   boolrb   r6   r7   )r   r"   rh   r   r   r	   r   r
   r   r   r)   r-   s    ``       @@r   r   'CanonicalConstraint._equal_to_canonical   s    HHQK	FF{{1~$/q!f-I!Q(I	2	*	& HHQK	FFq!f-I!Q(I44??r   c                   ^^^
^^ [         R                  " S5      m
TR                  nTR                  (       a  [        R
                  " SU45      mO[         R                  " SU45      mT[         R                  :  mSn[         R                  " T5      n[         R                  " T5      (       a  UU
U4S jnUU4S jnU4S jn	O;[         R                  " T5      S   mUT   nTT   mUU
UU4S jnUUU4S jnUU4S jn	U " XVXxX5      $ )Nr   c                 0   > TTR                  U 5      T-
  4$ r   rg   )r(   r"   r)   r!   s    r   r
   3CanonicalConstraint._less_to_canonical.<locals>.fun   s     $((1+"222r   c                 *   > TTR                  U 5      4$ r   rk   rl   s    r   r   3CanonicalConstraint._less_to_canonical.<locals>.jac   s     $((1+--r   c                 &   > TR                  X5      $ r   ro   rp   s      r   r   4CanonicalConstraint._less_to_canonical.<locals>.hess   s    yy++r   c                 6   > TTR                  U 5      T   T-
  4$ r   rg   )r(   r"   r)   	finite_ubr!   s    r   r
   rv      s      $((1+i"82"===r   c                 0   > TTR                  U 5      T   4$ r   rk   )r(   r"   r-   r|   s    r   r   rx      s     $((1+i"888r   c                 n   > [         R                  " TR                  5      nX#T'   TR                  X5      $ r   r   zerosmr   )r(   r0   r1   vr"   r|   s       r   r   rz      s*    HHTVV$%)yy&r   
r   r   r   rb   r6   r7   r   ra   r   nonzero)r   r"   r!   r   r   r   r	   r
   r   r   r)   r-   r|   s    ``       @@@r   r   &CanonicalConstraint._less_to_canonical   s    HHQK	FFq!f-I!Q(IK		"66)3., 

9-a0I))4MIB> >9'
 44??r   c                   ^^^
^^ [         R                  " S5      m
TR                  nTR                  (       a  [        R
                  " SU45      mO[         R                  " SU45      mT[         R                  * :  mSn[         R                  " T5      n[         R                  " T5      (       a  UU
U4S jnUU4S jnU4S jn	O;[         R                  " T5      S   mUT   nTT   mUU
UU4S jnUUU4S jnUU4S jn	U " XVXxX5      $ )Nr   c                 0   > TTTR                  U 5      -
  4$ r   rg   )r(   r"   r)   r    s    r   r
   6CanonicalConstraint._greater_to_canonical.<locals>.fun   s     "txx{"222r   c                 ,   > TTR                  U 5      * 4$ r   rk   rl   s    r   r   6CanonicalConstraint._greater_to_canonical.<locals>.jac   s     488A;,..r   c                 (   > TR                  X* 5      $ r   ro   rp   s      r   r   7CanonicalConstraint._greater_to_canonical.<locals>.hess   s    yyG,,r   c                 6   > TTTR                  U 5      T   -
  4$ r   rg   )r(   r"   r)   	finite_lbr    s    r   r
   r      s      "txx{9'="===r   c                 2   > TTR                  U 5      T   * 4$ r   rk   )r(   r"   r-   r   s    r   r   r      s     488A;y#9"999r   c                 r   > [         R                  " TR                  5      nU* UT'   TR                  X5      $ r   r   )r(   r0   r1   r   r"   r   s       r   r   r      s.    HHTVV$ &w)yy&r   r   )r   r"   r    r   r   r   r	   r
   r   r   r)   r-   r   s    ``       @@@r   r   )CanonicalConstraint._greater_to_canonical   s    HHQK	FFq!f-I!Q(I"&&L		"66)3/- 

9-a0I))4MIB> >:'
 44??r   c           	        ^^^^^^^^^^ T[         R                  * :H  nT[         R                  :H  nTT:H  mXV) -  mXe) -  mT) U) -  U) -  m[         R                  " T5      S   m[         R                  " T5      S   m[         R                  " T5      S   m[         R                  " T5      S   mTR                  S   mTR                  S   mTR                  S   mTT-   ST-  -   nTR                  S   n[         R                  " UT   UT   UT   UT   45      nUUUUUUU4S jn	UUUUU4S jn
UUUUUUUUU4	S jnU " XXX5      $ )Nr      c                    > TR                  U 5      nUT   TT   -
  nUT   TT   -
  nTT	   UT	   -
  nUT
   TT
   -
  nTT
   UT
   -
  nU[        R                  " X4XV45      4$ r   )r
   r   r=   )r(   feqlegeiligr"   equalgreaterintervalr    lessr!   s          r   r
   7CanonicalConstraint._interval_to_canonical.<locals>.fun  s    A5BuI%B42d8#BGqz)B8r(|+BH(+Bryy""!1222r   c                    > TR                  U 5      nUT	   nUT   nUT
   * nUT   nU* n[        R                  " U5      (       a  [        R                  " X4XV45      nX'4$ [        R                  " X4XV45      nX'4$ r   )r   r6   issparserD   r   )r(   Jr   r   r   r   r   ineqr"   r   r   r   r   s           r   r   7CanonicalConstraint._interval_to_canonical.<locals>.jac(  s    A5B4BG*B8BB||Azz22"23 8O yy""!128Or   c                    >	 SnX#UT-    nUT-  nX#UT-    nUT-  nX#UT-    nUT-  nX#UT-    n[         R                  " T5      nXT
'   XHT'   U* UT'   Xg-
  UT'   T	R                  X5      $ )Nr   )r   rH   r   )r(   r0   r1   n_startv_lv_gv_ilv_igr   r"   r   r   r   r    r   	n_greater
n_intervaln_lesss            r   r   8CanonicalConstraint._interval_to_canonical.<locals>.hess5  s    G6!12CvG9!45Cy G'J"67Dz!G'J"67Db!AeHdGAgJ+AhK99Q?"r   )r   r   r   rR   r=   )r   r"   r    r!   r   lb_infub_infr	   r   r
   r   r   r   r   r   r   r   r   r   s    ```        @@@@@@@r   r   *CanonicalConstraint._interval_to_canonical  sH   wrvvb7"6VG#vg-

5!!$zz$"**W%a(::h'*AMM!$	^^A&
)#a*n4{{1~		=#6#0#9#0#:#0#:#< =
	3 	3	 		# 	#$ 44??r   )r
   r   r   r   r   r	   N)__name__
__module____qualname____firstlineno____doc__r   classmethodr#   r   rc   r   r   r   r   __static_attributes__r'   r   r   r   r      s    #H+ K K( F F* 7@ 7@r @ @> %@ %@N %@ %@N ?@ ?@r   r   c                    / n/ n/ n/ nU GH  nUR                   R                  nUR                   R                  n	UR                  u  p[        R
                  " X:H  5      (       a&  UR                  X-
  5        UR                  U	5        M  [        R
                  " U
[        R                  * :H  5      (       a@  U[        R                  :  nUR                  X   X   -
  5        UR                  X   5        M  [        R
                  " U[        R                  :H  5      (       aC  U
[        R                  * :  nUR                  X   X   -
  5        UR                  X   * 5        GM]  U
[        R                  * :H  nU[        R                  :H  nX:H  nX) -  nX) -  nU) U) -  U) -  nUR                  UU   U
U   -
  5        UR                  UU   UU   -
  5        UR                  U
U   UU   -
  5        UR                  UU   UU   -
  5        UR                  U
U   UU   -
  5        UR                  U	U   5        UR                  U	U   5        UR                  U	U   * 5        UR                  U	U   5        UR                  U	U   * 5        GM     U(       a  [        R                  " U5      O[        R                  " S5      nU(       a  [        R                  " U5      O[        R                  " S5      nU(       a)  [        R                  n[        R                  " SU 45      nO([        R                  n[        R                  " SU 45      nU(       a  U" U5      OUnU(       a  U" U5      OUnX4XV4$ )a  Convert initial values of the constraints to the canonical format.

The purpose to avoid one additional call to the constraints at the initial
point. It takes saved values in `PreparedConstraint`, modifies and
concatenates them to the canonical constraint format.
r   )r
   r   r   r   r   r   rQ   r   r=   r   r6   rD   r7   )r   prepared_constraintsrb   c_eqc_ineqJ_eqJ_ineqr>   r   r   r    r!   r|   r   r   r   r   r   r   r   rD   r   s                         r    initial_constraints_as_canonicalr   J  s    DFDF!EEGGEEGG66"(KKKKNVVB266'M""RVVIMM!,67MM!,'VVB"&&L!!bffWIMM"-!,67MM1<-(BFF7]F266\FHEG#Dw&Gv'6'1HKK%2e9,-MM!D'BtH,-MM"W+'
23MM!H+845MM"X,845KK%!MM!D'"MM1W:+&MM!H+&MM1X;,'C "F #299T?D"(RYYvbhhqkFq!f%!Q 6$<UD%VF^5F%%r   )numpyr   scipy.sparsesparser6   r   r   r'   r   r   <module>r      s     B@ B@J
<&r   