o
    5ήc!                     @   sf   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	d
 ZddefddZdS )z&Byrd-Omojokun Trust-Region SQP method.    )eye   )projections)modified_doglegprojected_cgbox_intersectionsN)normequality_constrained_sqpc                 C   s   t | \}t|S )N)npshapespeye)xn r   b/tmp/pip-target-vg8gfxp4/lib/python/scipy/optimize/_trustregion_constr/equality_constrained_sqp.pydefault_scaling   s   r   c           N   	   C   sL  d}d}d}d}d}d}d}d}d}d}d}t |\}|d	u r(t |t j }|d	u r3t |t j}t |}|}|
}|}|} |}!|}"||}#t|"|\}$}%}&|%|  }'|||'}(t| |"j|' t j})t	|!d
krst|!t jnd
}*d
d
dd}+d},||	||,|)|*|||+s"t
|"|&|!|| || || }-|(|-|  }.t |!}/t |d t j|-d  }0||- }1||- }2t|(|.|$|&|/|0|1|2\}3}+|-|3 }4d|(|4|4 | j|4 }5|"|4|! }6t|!t|6 }7td|7}7|}8|5d
kr|5d| |7  }9t||9}|5 ||7  }:||t|!  };||#|4 }<| |<\}=}>|=|t|>  }?|;|? }@|@|: }A|A|k rt|-|t|3 kr|&|> }Bt|4|B||\}C}D}E||#|4|D|B   }F| |F\}G}H|G|t|H  }I|;|I }J|J|: }K|Er|K|kr|F}<|G}=|H}>|K}A|A|krt|t|4 |}n<|A|krt|t|4 |}n-|A|k rd| d|A  }L|Lt|4 }M|M|| kr||9 }n|M|| kr|M}n||9 }|A|kr|<}|=|>}}!||\} }"||}#t|"|\}$}%}&|%|  }'|||'}(d},t| |"j|' t j})t	|!d
krt|!t jnd
}*n|8}d},||	||,|)|*|||+r||	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?Nr   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_radiusr   r   r   r	      s    


 










 |)__doc__scipy.sparser   r   r   qp_subproblemr   r   r   numpyr
   numpy.linalgr   __all__r   r	   r   r   r   r   <module>   s    