
    xf!                     b    d Z ddlmZ ddlmZ ddlmZmZmZ ddl	Z
ddlmZ dgZd	 Zddefd
Zy)z&Byrd-Omojokun Trust-Region SQP method.    )eye   )projections)modified_doglegprojected_cgbox_intersectionsN)normequality_constrained_sqpc                 F    t        j                  |       \  }t        |      S )N)npshapespeye)xns     ]/usr/lib/python3/dist-packages/scipy/optimize/_trustregion_constr/equality_constrained_sqp.pydefault_scalingr      s    	!BA8O    c           
      >	   d}d}d}d}d}d}d}d}d}d}d}t        j                  |      \  }|%t        j                  |t         j                         }|$t        j                  |t         j                        }t        j                  |      }|}|
}|}|} |}!|}" ||      }#t        |"|      \  }$}%}&|%j                  |        }' |||'      }(t        | |"j                  j                  |'      z   t         j                        })t        |!      d	kD  rt        |!t         j                        nd	}*d	d	d
d}+d
}, ||	||,|)|*|||+      sTt        |"|&|!||z  ||z  ||z        }-|(j                  |-      | z   }.t        j                  |!      }/t        j                  |dz  t         j                  j                  |-      dz  z
        }0||-z
  }1||-z
  }2t        |(|.|$|&|/|0|1|2      \  }3}+|-|3z   }4d|(j                  |4      j                  |4      z  | j                  j                  |4      z   }5|"j                  |4      |!z   }6t        |!      t        |6      z
  }7t        d|7      }7|}8|5d	kD  r|5d|z
  |7z  z  }9t        ||9      }|5 ||7z  z   }:||t        |!      z  z   };||#j                  |4      z   }< | |<      \  }=}>|=|t        |>      z  z   }?|;|?z
  }@|@|:z  }A|A|k  rt        |-      |t        |3      z  k  rs|&j                  |>       }Bt!        |4|B||      \  }C}D}E||#j                  |4|D|Bz  z         z   }F | |F      \  }G}H|G|t        |H      z  z   }I|;|Iz
  }J|J|:z  }K|ErK|k\  rF}<G}=H}>K}AA|k\  rt        |t        |4      z  |      }nZA|k\  rt        |t        |4      z  |      }n<A|k  r7d|z
  dAz
  z  }L|Lt        |4      z  }M|M||z  k\  r||z  }nM||z  k\  rM}n||z  }A|k\  r|<}|=|>}!} ||      \  } }" ||      }#t        |"|      \  }$}%}&|%j                  |        }' |||'      }(d
},t        | |"j                  j                  |'      z   t         j                        })t        |!      d	kD  rt        |!t         j                        nd	}*n|8}d}, ||	||,|)|*|||+      sT||	fS )au  Solve nonlinear equality-constrained problem using trust-region SQP.

    Solve optimization problem:

        minimize fun(x)
        subject to: constr(x) = 0

    using Byrd-Omojokun Trust-Region SQP method described in [1]_. Several
    implementation details are based on [2]_ and [3]_, p. 549.

    References
    ----------
    .. [1] Lalee, Marucha, Jorge Nocedal, and Todd Plantenga. "On the
           implementation of an algorithm for large-scale equality
           constrained optimization." SIAM Journal on
           Optimization 8.3 (1998): 682-706.
    .. [2] Byrd, Richard H., Mary E. Hribar, and Jorge Nocedal.
           "An interior point algorithm for large-scale nonlinear
           programming." SIAM Journal on Optimization 9.4 (1999): 877-900.
    .. [3] Nocedal, Jorge, and Stephen J. Wright. "Numerical optimization"
           Second Edition (2006).
    g333333?g?g:0yE>g      @g       @g      ?g?g?r   F)niter	stop_condhits_boundary   gؗҜ<r   T)r   r   fullinfcopyr   dotr	   Tlenr   
zeros_likesqrtlinalgr   maxr   )Nfun_and_constrgrad_and_jac	lagr_hessx0fun0grad0constr0jac0stop_criteriastateinitial_penaltyinitial_trust_radiusfactorization_methodtrust_lbtrust_ubscalingPENALTY_FACTORLARGE_REDUCTION_RATIOINTERMEDIARY_REDUCTION_RATIOSUFFICIENT_REDUCTION_RATIOTRUST_ENLARGEMENT_FACTOR_LTRUST_ENLARGEMENT_FACTOR_SMAX_TRUST_REDUCTIONMIN_TRUST_REDUCTIONSOC_THRESHOLD	TR_FACTOR
BOX_FACTORr   r   trust_radiuspenaltyfcbASZLSYvH
optimalityconstr_violationcg_infolast_iteration_faileddnc_tb_ttrust_radius_tlb_tub_tdtdquadratic_modellinearized_constrvpredprevious_penaltynew_penaltypredicted_reductionmerit_functionx_nextf_nextb_nextmerit_function_nextactual_reductionreduction_ratioy_t	intersectx_socf_socb_socmerit_function_socactual_reduction_socreduction_ratio_soctrust_reductionnew_trust_radiussN                                                                                 r   r
   r
      sQ   @ N#& !%!$!$MIJ	"BA 771rvvg&771bff% 	A'LGAAAA
A123HAr1	
A!QA a!##''!*nbff-J*-a&1*tArvv! %'G "E1&;&(8('7< Q1&|3'0'02 eeBi!mmmAq299>>"3Eq3H!HI"}"}"1c1a#1#'/G
 G quuQxnnQ//!##''!*<EE!HQJ Q$011 E5!"Q)a.>-EFK';/G  /.> WT!W_,QUU1X'/$wtF|';; *,??*-@@ 778}tBx//vA/1hIOAq)a!A#g&E)%0LE5!&e)<!<#14F#F "69L"L04NN"5 339DGC+-L <<9DGC+-L 99 !"< < !/ 1 3O.a8#6#EE 33!%8<%GG/ 33 88A6qA?DAq
A"1&:;HAr1
A!QA$)!a!##''!*nbff5J25a&1*tArvv!&G$(!u E1&;&(8('7<x e8Or   )__doc__scipy.sparser   r   r   qp_subproblemr   r   r   numpyr   numpy.linalgr	   __all__r   r
    r   r   <module>rv      s8    , % $ K K  %
& '+&*%4Hr   