+
    /iN-                         R t ^ RIt^ RIHtHtHt ^ RIHu Ht	 ^ RIH
t
 ^ RIt^ RIt^ RItRR ltRR ltR tR tRR lt ! R	 R
4      tR# )z 
Tests for line search routines
N)assert_equalassert_array_almost_equalassert_array_almost_equal_nulp)LineSearchWarningc                   V! V 4      pV! ^ 4      pV! ^ 4      pV! V 4      p	RV  RV RV RV RV	 RV 2p
WgW0,          V,          ,           8:  g   Q RV
,           4       h\        V	4      \        WH,          4      8:  g   Q RV
,           4       hR	# )
z*
Check that strong Wolfe conditions apply
s = ; phi(0) = ; phi(s) = z; phi'(0) = z; phi'(s) = ; zWolfe 1 failed: zWolfe 2 failed: N)abs)sphiderphic1c2err_msgphi1phi0derphi0derphi1msgs   &&&&&&     b/var/www/html/photoedit/myenv/lib/python3.14/site-packages/scipy/optimize/tests/test_linesearch.pyassert_wolfer      s     q6Dq6DQiGQiG!Kv[l7) L 	G9.C "$w,&&@(:S(@@&w<3rz?*D,>,DD*    c                    V! V 4      pV! ^ 4      pRV  RV RV RV 2pV^W ,          ,
          V,          8:  g   Q V4       hR# )z%
Check that Armijo condition applies
r   r   r	   r
   N )r   r   r   r   r   r   r   s   &&&&   r   assert_armijor      sQ     q6Dq6D;tfKvRy
ACAHd?"'C'"r   c           	      F   a aaa \        V3R VVV 3R lRVVV 3R l/VB  R# )r   c                 0   < S! SSV ,          ,           4      # Nr   spfpxs   &r   <lambda>#assert_line_wolfe.<locals>.<lambda>)   s    1Q2X;r   r   c                 Z   < \         P                  ! S! SSV ,          ,           4      S4      # r   npdot)r!   fprimer#   r$   s   &r   r%   r&   *   s    266&QrT*:A#>r   N)r   )r$   r#   r   r"   r+   kws   ff&ff,r   assert_line_wolfer-   (   s)     F. F>FBDFr   c                 4   a aa \        V3R VVV 3R l/VB  R# )r   c                 0   < S! SSV ,          ,           4      # r   r   r    s   &r   r%   $assert_line_armijo.<locals>.<lambda>.   s    Aa!B$hKr   N)r   )r$   r#   r   r"   r,   s   ff&f,r   assert_line_armijor1   -   s    !6/626r   c                h     \        WV4       R#   \         d   p\        T RT 24      ThRp?ii ; i)zEAssert two arrays are equal, up to some floating-point rounding error
N)r   AssertionError)r$   yr   nulpes   &&&& r   assert_fp_equalr8   1   s9    7&qT2 7s"WI./Q67s    1,1c                      a  ] tR t^9t o R tR tR tR tR tR t	R t
R tR	 tR
 tR tR tR tR tR tR tR tR tR tRtV tR# )TestLineSearchc                >   \        V P                  R 4      '       g   ^ V P                  n        V P                  ;P                  ^,          un        V) V^,          ,
          V^,          ,           pR^V^,          ,          ,
          ^V^,          ,          ,           pW#3# )c)hasattrfcountr<   selfr   r#   dps   &&  r   _scalar_func_1TestLineSearch._scalar_func_1;   sm    t{{C((DKKMBAI1!AqD&[1QT6!ur   c                b   \        V P                  R 4      '       g   ^ V P                  n        V P                  ;P                  ^,          un        \        P                  ! RV,          4      V^,          ,           pR\        P                  ! RV,          4      ,          ^V,          ,           pW#3# )r<   )r>   r?   r<   r)   expr@   s   &&  r   _scalar_func_2TestLineSearch._scalar_func_2C   so    t{{C((DKKMFF2a4L1a4r!t_qs"ur   c                ,   \        V P                  R 4      '       g   ^ V P                  n        V P                  ;P                  ^,          un        \        P                  ! ^
V,          4      ) pR\        P
                  ! ^
V,          4      ,          pW#3# )r<   i)r>   r?   r<   r)   sincosr@   s   &&  r   _scalar_func_3TestLineSearch._scalar_func_3K   s`    t{{C((DKKMVVBqD\M1ur   c                    \        V P                  R 4      '       g   ^ V P                  n        V P                  ;P                  ^,          un        \        P                  ! W4      p^V,          pW#3# r<   )r>   r?   r<   r)   r*   rA   r$   r"   dfs   &&  r   _line_func_1TestLineSearch._line_func_1U   sM    t{{C((DKKMFF1LqSur   c                   \        V P                  R 4      '       g   ^ V P                  n        V P                  ;P                  ^,          un        \        P                  ! V\        P                  ! V P
                  V4      4      ^,           p\        P                  ! V P
                  V P
                  P                  ,           V4      pW#3# rP   )r>   r?   r<   r)   r*   ATrQ   s   &&  r   _line_func_2TestLineSearch._line_func_2]   s|    t{{C((DKKMFF1bffTVVQ'(1,VVDFFTVVXX%q)ur   c           	     r   . V n         . V n        ^V n        \        P                  ! 4       V n        R p\        \        V 4      4       F  pVP                  R4      '       d9   \        W4      pV P                   P                  W!! V^ 4      V! V^4      34       KR  VP                  R4      '       g   Kk  \        W4      pV P                  P                  W!! V^ 4      V! V^4      34       K  	  \        P                  P                  R4      pVP                  V P                  V P                  34      V n        R# )   c                    a a V V3R  l# )c                  "   < S! V / VB S,          # r   r   )ar,   funcidxs   *,r   r%   ATestLineSearch.setup_method.<locals>.bind_index.<locals>.<lambda>o   s    D!NrN3$7r   r   )r_   r`   s   ffr   
bind_index/TestLineSearch.setup_method.<locals>.bind_indexm   s	    77r   _scalar_func__line_func_i1mIN)scalar_funcs
line_funcsN	threadinglocalr?   sorteddir
startswithgetattrappendr)   randomdefault_rngstandard_normalrV   )rA   rb   namevaluerngs   &    r   setup_methodTestLineSearch.setup_methodg   s    oo'	8 3t9%D//+!!((:eQ/E11EFH//+&&:eQ/E11EFH & ii##J/$$dffdff%56r   c              #     "   \         P                  P                  R 4      pV P                   F$  w  r#pVP	                  ^4       F	  pW#WE3x  K  	  K&  	  R# 5il   {
 N)r)   rp   rq   rf   rr   )rA   ru   rs   r   r   old_phi0s   &     r   scalar_iterTestLineSearch.scalar_iter   sN     ii##J/!%!2!2Dv//211 3 "3s   AAc              #    "   \         P                  P                  R 4      pV P                   F  w  r#p^ pV^	8  g   K  VP	                  V P
                  4      pVP	                  V P
                  4      p\         P                  ! Wt! V4      4      ^ 8  d   Kb  V^,          p\        VP	                  4       4      pW#WFWx3x  K  	  R# 5iry   )r)   rp   rq   rg   rr   rh   r*   float)	rA   ru   rs   r"   r+   kr$   r#   old_fvs	   &        r   	line_iterTestLineSearch.line_iter   s     ii##J/#ODVAa%''/''/66!VAY'1,Qs2245v!33  /s   8CBCc           
        ^ pV P                  4        Fg  w  r#rEV^,          p\        P                  ! W4V! ^ 4      WT! ^ 4      4      w  rgp\        W! ^ 4      V4       \        Ws! V4      V4       \	        WcWBR7       Ki  	  V^8  g   Q hR#     r   N)r{   lsscalar_search_wolfe1r8   r   )	rA   r<   rs   r   r   rz   r   r   r   s	   &        r   test_scalar_search_wolfe1(TestLineSearch.test_scalar_search_wolfe1   s    +/+;+;+='DvFA33CQ4<fQiIMATD#a&$/D#a&$/6 ,> 1uur   c           
     "   V P                  4        Fz  w  rr4\        P                  ! W#V! ^ 4      WC! ^ 4      4      w  rVrx\        Wr! ^ 4      V4       \        Wb! V4      V4       Ve   \        W! V4      V4       \	        WRW1 RVR 2R7       K|  	  R# )r   N gr   )r{   r   scalar_search_wolfe2r8   r   )	rA   rs   r   r   rz   r   r   r   r   s	   &        r   test_scalar_search_wolfe2(TestLineSearch.test_scalar_search_wolfe2   s    +/+;+;+='Dv%'%<%<SVXvay&:"ATD#a&$/D#a&$/"D968A,1GH ,>r   c                b    R  pR p\         P                  ! WRR7      w  p rEVe   Q hVe   Q hR# )c                 "    V ^,
          ^,          # )   r   alphas   &r   r   CTestLineSearch.test_scalar_search_wolfe2_with_low_amax.<locals>.phi   s    AI!##r   c                 "    ^V ^,
          ,          #    r   r   s   &r   r   FTestLineSearch.test_scalar_search_wolfe2_with_low_amax.<locals>.derphi   s    	?"r   gMbP?amaxNr   r   )rA   r   r   
alpha_star_derphi_stars   &     r   'test_scalar_search_wolfe2_with_low_amax6TestLineSearch.test_scalar_search_wolfe2_with_low_amax   s@    	$	# )+(?(?RW(X%
Aq!!!"""r   c                Z    R  pR p\         P                  ! W4      w  p  pVR8  g   Q hR# )c                    V ^8  d-   R\         P                  ,          ^,          V ^,
          ,          # \         P                  ! ^\         P                  ,          ^,          V ,          \         P                  ,
          4      #    )r)   pirL   r   s   &r   r   @TestLineSearch.test_scalar_search_wolfe2_regression.<locals>.phi   sM    qy255y{eai00vvagai%/"%%788r   c                 .   V ^8  d   R\         P                  ,          ^,          # R\         P                  ,          ^,          \         P                  ! ^\         P                  ,          ^,          V ,          \         P                  ,
          4      ,          # r   )r)   r   rK   r   s   &r   r   CTestLineSearch.test_scalar_search_wolfe2_regression.<locals>.derphi   sU    qy255y{"255y{RVVAbeeGAI,=,E%FFFr   g      ?Nr   )rA   r   r   r   r   s   &    r   $test_scalar_search_wolfe2_regression3TestLineSearch.test_scalar_search_wolfe2_regression   s4    	9	G ,,S9
1a 3wwr   c           	         V P                  4        FP  w  rr4\        P                  ! W"! ^ 4      V! ^ 4      4      w  rV\        Wb! V4      V4       \	        WRV RVR 2R7       KR  	  R# )r   r   r   r   N)r{   r   scalar_search_armijor8   r   )rA   rs   r   r   rz   r   r   s   &      r   test_scalar_search_armijo(TestLineSearch.test_scalar_search_armijo   s_    +/+;+;+='Dv--c3q66!9EGAD#a&$/!TF!HQ<*@A ,>r   c                   ^ p^dpV P                  4        F  w  r4rVrxV! V4      p	V! V4      p
^ V P                  n        \        P                  ! WEWgWVVR7      w  rrpp\        V P                  P                  W,           4       \        W! V4      4       Vf   K  \        W! WkV,          ,           4      4       \        VV! WkV,          ,           4      ^R7       W8  g   K  V^,          p\        WgWWSR7       K  	  V^8  g   Q hR# )r   r   Ndecimalr   )	r   r?   r<   r   line_search_wolfe1r   r8   r   r-   rA   r<   smaxrs   r"   r+   r$   r#   old_ff0g0r   fcgcfvofvgvs   &                r   test_line_search_wolfe1&TestLineSearch.test_line_search_wolfe1   s    ,0NN,<(DV1BBDKKM%'%:%:1a;=5@D&F"A23 .C1&yB!c'
+%b&qS/2FxQ!!fC -=" 1uur   c                   ^ pRpV P                  4        EFE  w  r4rVrxV! V4      p	V! V4      p
^ V P                  n        \        P                  ! 4       ;_uu_ 4        \        P
                  ! RR\        4       \        P
                  ! RR\        4       \        P                  ! WEWgWVVR7      w  rrppRRR4       \        V P                  P                  XX,           4       \        XV! V4      4       \        XV! VXV,          ,           4      4       Xe"   \        VV! WkV,          ,           4      ^R7       W8  g   EK.  V^,          p\        WgWWSR7       EKH  	  V^8  g   Q hR#   + '       g   i     L; i)	r   i   ignorez3The line search algorithm could not find a solutionz*The line search algorithm did not converger   Nr   r   )r   r?   r<   warningscatch_warningsfilterwarningsr   r   line_search_wolfe2r   r8   r   r-   r   s   &                r   test_line_search_wolfe2&TestLineSearch.test_line_search_wolfe2   s7   ,0NN,<(DV1BBDKKM((**''I%' ''@%' *,)>)>q!?AuDH*J&rsB + 2.C1&B!ac'
+~)"fQ1WorJxQ!!fCC/ -=0 1uu) +*s   AE**E:c                0   R  pR p\         P                  ! ^^ .4      pRV,          pRp\        P                  ! WWC^VR7      w  p    p\	        WCWaV4       \
        P                  ! \        4      ;_uu_ 4        \        P                  ! WWC^VR7      w  p    pRRR4       Ve   Q h\
        P                  ! \        4      ;_uu_ 4        \        P                  ! WWCV^R7       RRR4       R#   + '       g   i     L]; i  + '       g   i     R# ; i)c                 .    \         P                  ! W 4      # r   r(   r$   s   &r   r"   8TestLineSearch.test_line_search_wolfe2_bounds.<locals>.f  s    66!<r   c                     ^V ,          # r   r   r   s   &r   fp9TestLineSearch.test_line_search_wolfe2_bounds.<locals>.fp  s    q5Lr   g      ?)r   r   N)r   maxiteri)r)   arrayr   r   r-   pytestwarnsr   )rA   r"   r   r#   r$   r   r   r   s   &       r   test_line_search_wolfe2_bounds-TestLineSearch.test_line_search_wolfe2_bounds  s    	 	HHaV !G002"M1aAq!b)\\+,,!44QA:< EAq!Q1 - yy \\+,,!!!"a@ -, -, -,,s   :"C1D1D	D	c           	     t   ^ pV P                  4        F  w  r#rErgV! V4      pV! V4      p	^ V P                  n        \        P                  ! W5WiV4      w  rpV^,          p\        V P                  P                  V4       \        W! WZV,          ,           4      4       \        WVWVR7       K  	  V^	8  g   Q hR# r   )r   r?   r<   r   line_search_armijor   r8   r1   )rA   r<   rs   r"   r+   r$   r#   r   r   r   r   r   r   s   &            r   test_line_search_armijo&TestLineSearch.test_line_search_armijo!  s    ,0NN,<(DV1BBDKKM--aA2>IA2FA+B!c'
+qQ48 -= Avvr   c                   a ^ .oV3R lp\         P                  ! W! ^ 4      R^R7      w  r#\        V^4       \        S^ ,          ^4       \        W!4       R# )r   c                 ^   < S^ ;;,          ^,          uu&   V ) RV ^,          ,          ,           # )r   g{Gz?r   r   counts   &r   r   3TestLineSearch.test_armijo_terminate_1.<locals>.phi5  $    !HMH2QT	>!r   )alpha0Nr=   )r   r   r   r   )rA   r   r   r   r   s   &   @r   test_armijo_terminate_1&TestLineSearch.test_armijo_terminate_10  sO     	" ))#s1vr!DQU1Xq!ar   c           
     2  a V3R  lpV3R lp\         P                  \         P                  3 Fe  p^ .oV! WV! ^ 4      RV! ^ 4      4      pV^ ,          f	   Q WC34       hS^ ,          ^8:  g
   Q SV34       h\        V^ ,          W\	        V4      R7       Kg  	  R# )c                 ^   < S^ ;;,          ^,          uu&   V ) RV ^,          ,          ,           # )r   g?r   r   s   &r   r   0TestLineSearch.test_wolfe_terminate.<locals>.phiA  r   r   c                 N   < S^ ;;,          ^,          uu&   RRV ,          ,           # )r   r=   g?r   r   s   &r   r   3TestLineSearch.test_wolfe_terminate.<locals>.derphiE  s    !HMHq= r   Nr   )r   r   r   r   str)rA   r   r   r_   rr   s   &    @r   test_wolfe_terminate#TestLineSearch.test_wolfe_terminate=  s    	"	! ,,b.E.EFDCES#a&$q	:AQ4#.aY.#8u$3udm3$1sCI> Gr   )rV   rh   r?   rg   rf   N)__name__
__module____qualname____firstlineno__rC   rH   rM   rS   rX   rv   r{   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes____classdictcell__)__classdict__s   @r   r:   r:   9   sl     7024 
I	#(B,:A8? ?r   r:   )-C6?g? )r   r   )r   2   )__doc__r   numpy.testingr   r   r   scipy.optimize._linesearchoptimize_linesearchr   r   numpyr)   r   ri   r   r   r-   r1   r8   r:   r   r   r   <module>r      sR    ; ; ' ' 8   E(F
77U? U?r   