+
    /iK                     |   R t ^ RIt^ RIHtHtHtHt ^ RIt^ RIHt	 ^ RI
t^ RI
HtHt ^ RIHtHt ^ RIHtHtHtHt R tR tR	 tR
 t ! R R]4      tR t ! R R4      t ! R R4      t ! R R4      t ! R R4      t ! R R4      t  ! R R4      t!]PD                  PG                  RR7       ! R R4      4       t$R# )zA
Unit tests for the basin hopping global minimization algorithm.
N)assert_almost_equalassert_equalassert_assert_allclose)raises)cossin)basinhoppingOptimizeResult)StorageRandomDisplacement
MetropolisAdaptiveStepsizec                     \        R V ,          R,
          4      V R,           V ,          ,           p\        P                  ! R\        R V ,          R,
          4      ,          RV ,          ,           R,           4      pW3#       -@333333?皙?       @g      -)r   nparrayr   xfdfs   &  e/var/www/html/photoedit/myenv/lib/python3.14/site-packages/scipy/optimize/tests/test__basinhopping.pyfunc1dr      sV    D1HsNq3w!m+A	%#dQhn--Q6<	=B5L    c                     \        R V ^ ,          ,          R,
          4      V ^,          R,           V ^,          ,          ,           V ^ ,          R,           V ^ ,          ,          ,           pV# )r   r   r   )r   )r   r   s   & r   func2d_nogradr      sJ    D1Q4K#!A$*!!44!s
ad7JJAHr   c                    \        R V ^ ,          ,          R,
          4      V ^,          R,           V ^,          ,          ,           V ^ ,          R,           V ^ ,          ,          ,           p\        P                  ! ^4      pR\        R V ^ ,          ,          R,
          4      ,          RV ^ ,          ,          ,           R,           V^ &   RV ^,          ,          R,           V^&   W3# r   )r   r   zerosr   r   s   &  r   func2dr"      s    D1Q4K#!A$*!!44!s
ad7JJA	!BCqtc)**R!A$Y6<BqE1IOBqE5Lr   c                    R V ^ ,          ^,          ,          R V ^ ,          ,          V ^,          ,          ,           R V ^,          ^,          ,          ,           RV ^ ,          ,          ,
          p\         P                  ! ^4      pRV ^ ,          ,          R V ^,          ,          ,           R,
          V^ &   R V ^ ,          ,          RV ^,          ,          ,           V^&   W3# )r   g      @g      @)r   r!   r   s   &  r   func2d_easyderivr$   %   s    AaD!Gc!A$hqtm#c!A$'k1C!H<A	!B!Hs1Q4x#%BqE!Hs1Q4xBqE5Lr   c                   B   a a ] tR t^.t oRtV 3R ltV 3R ltRtVtV ;t	# )MyTakeStep1zbuse a copy of displace, but have it set a special parameter to
make sure it's actually being used.c                2   < R V n         \        SV `	  4        R# FN)been_calledsuper__init__)self	__class__s   &r   r+   MyTakeStep1.__init__1   s     r   c                0   < R V n         \        SV `	  V4      # T)r)   r*   __call__)r,   r   r-   s   &&r   r1   MyTakeStep1.__call__5   s    w""r   )r)   )
__name__
__module____qualname____firstlineno____doc__r+   r1   __static_attributes____classdictcell____classcell__)r-   __classdict__s   @@r   r&   r&   .   s     +# #r   r&   c                    RpV \         P                  P                  V) V\         P                  ! V 4      4      ,          p V # )zoredo RandomDisplacement in function form without the attribute stepsize
to make sure everything still works ok
      ?)r   randomuniformshape)r   ss   & r   myTakeStep2rB   :   s5     	A		A2q"((1+	..AHr   c                   0   a  ] tR t^Ct o RtR tR tRtV tR# )MyAcceptTestzpass a custom accept test

This does nothing but make sure it's being used and ensure all the
possible return values are accepted
c           	         R V n         ^ V n        R RR\        P                  ! R4      \        P                  ! R 4      . / ^ ^.	V n        R# )Fzforce acceptTN)r)   ncallsr   bool_testresr,   s   &r   r+   MyAcceptTest.__init__I   s>     ~tRXXd^RA7r   c                    R V n         V ;P                  ^,          un        V P                  ^,
          \        V P                  4      8  d%   V P                  V P                  ^,
          ,          # R # r0   )r)   rF   lenrH   )r,   kwargss   &,r   r1   MyAcceptTest.__call__O   sK    q;;?S..<<a00r   )r)   rF   rH   N	r3   r4   r5   r6   r7   r+   r1   r8   r9   r;   s   @r   rD   rD   C   s     
7 r   rD   c                   0   a  ] tR t^Xt o RtR tR tRtV tR# )
MyCallBackzpass a custom callback function

This makes sure it's being used. It also returns True after 10
steps to ensure that it's stopping early.

c                "    R V n         ^ V n        R# r(   r)   rF   rI   s   &r   r+   MyCallBack.__init___   s     r   c                l    R V n         V ;P                  ^,          un        V P                  ^
8X  d   R # R# )TNrT   )r,   r   r   accepteds   &&&&r   r1   MyCallBack.__call__c   s,    q;;" r   rT   NrO   rP   s   @r   rR   rR   X   s      r   rR   c                   L  a  ] tR t^jt o R tR tR tR tR tR t	R t
R t]P                  P                  ^
4      R	 4       t]P                  P                  ^(4      ]P                  P!                  R
. RO4      R 4       4       tR tR tR tR tR tR tR tR tR tRtV tR# )TestBasinHoppingc                    RRR.3V n         R\        P                  ! RR	.4      3V n        ^V n        ^dV n        RV n        RRRR/V n        RR/V n        R# )
zLTests setup.

Run tests based on the 1-D and 2-D functions described above.
      ?FmethodL-BFGS-BjacTNg(\ȿg)	x0r   r   soltolniterdisprM   kwargs_nogradrI   s   &r   setup_methodTestBasinHopping.setup_methodl   s_    
 c
#BHHfd^45
	UD9&
3r   c                    ^p\        \        \        \        V P                  V,          ^R7       \        \        \        \        V P                  V,          ^R7       R# )   )	take_step)accept_testN)assert_raises	TypeErrorr	   r"   r`   r,   is   & r   test_TypeErrorTestBasinHopping.test_TypeError|   s?    ivtwwqz !	# 	ivtwwqz"#	%r   c                   R p\        \        VR7      ;_uu_ 4        \        \        V P                  ^ ,          RR7       RRR4       \        \        VR7      ;_uu_ 4        \        \        V P                  ^ ,          RR7       RRR4       Rp\        \        VR7      ;_uu_ 4        \        \        V P                  ^ ,          RR7       RRR4       \        \        VR7      ;_uu_ 4        \        \        V P                  ^ ,          RR7       RRR4       R#   + '       g   i     L; i  + '       g   i     L; i  + '       g   i     L}; i  + '       g   i     R# ; i)z.target_accept_rate has to be in range \(0, 1\))match        )target_accept_rateNr\   z+stepwise_factor has to be in range \(0, 1\))stepwise_factor)rl   
ValueErrorr	   r   r`   )r,   msgs   & r   test_input_validation&TestBasinHopping.test_input_validation   s    @:S11C 2:S11C 2 >:S11R@ 2:S11R@ 21 2111 21111s/   $D!$D.($E-$ED+	.D>	E	E%	c                    ^ p\        \        V P                  V,          V P                  V P                  V P
                  R7      p\        VP                  V P                  V,          V P                  4       R#     minimizer_kwargsrc   rd   N
r	   r   r`   rM   rc   rd   r   r   ra   rb   r,   ro   ress   &  r   test_1d_gradTestBasinHopping.test_1d_grad   sL    64771:!%$))=CEE488A;9r   c                $   ^p\        \        V P                  V,          V P                  V P                  V P
                  R7      p\        VP                  V P                  V,          V P                  4       \        VP                  ^ 8  4       R# ri   r~   N)r	   r"   r`   rM   rc   rd   r   r   ra   rb   r   nfevr   s   &  r   test_2dTestBasinHopping.test_2d   s\    64771:!%$))=CEE488A;91r   c                (   ^pV P                   P                  4       pRVR&   \        \        V P                  V,          W P
                  V P                  R7      p\        VP                  ^ 8  4       \        VP                  VP                  4       R# )ri   BFGSr]   r~   N)rM   copyr	   r"   r`   rc   rd   r   r   r   njev)r,   ro   r   r   s   &   r   	test_njevTestBasinHopping.test_njev   sm    ;;++-%+"64771:,<JJ $		+ 	1SXXsxx(r   c                X   V P                   P                  4       pR VR&   \        \        RR.WP                  V P
                  R7      p\        \        VP                  R4      4       \        VP                  4      w  r4\        VP                  P                  VV P                  4       R# )r   r]   rt   r~   r_   N)rM   r   r	   r$   rc   rd   r   hasattrlowest_optimization_resultr   r   r_   rb   )r,   r   r   _jacobians   &    r   test_jacTestBasinHopping.test_jac   s    ;;++-%+"+c3Z,<JJ $		+ 	66>? 'suu-C::>> HH	&r   c                    ^p\        \        V P                  V,          V P                  V P                  V P
                  R7      p\        VP                  V P                  V,          V P                  4       R# r   )
r	   r   r`   re   rc   rd   r   r   ra   rb   r   s   &  r   test_2d_nogradTestBasinHopping.test_2d_nograd   sQ    =$''!*,0,>,>!%$))= 	CEE488A;9r   c           	     B   ^p. ROp\         P                   ! V P                  4      pV Fr  pWCR&   \        \        V P                  V,          VV P
                  V P                  R7      p\        VP                  V P                  V,          V P                  4       Kt  	  R# )ri   r]   r~   N)CGr   z	Newton-CGr^   TNCSLSQP)r   rM   r	   r"   r`   rc   rd   r   r   ra   rb   )r,   ro   methodsr   r]   r   s   &     r   test_all_minimizers$TestBasinHopping.test_all_minimizers   sx     I99T[[1F)/X&vtwwqz0@%)ZZdiiAC  txx{DHH= r   r]   c           	     J   ^pV P                   P                  4       pWR&   VR9   d   ^
MV P                  p\        \        V P
                  V,          VW@P                  RR7      pVR8X  d   ^MV P                  p\        VP                  V P                  V,          VR7       R# )ri   r]   COBYLA  )r   rc   rd   seed)decimalN)r   COBYQA)re   r   rc   r	   r   r`   rd   rb   r   r   ra   )r,   r]   ro   r   rc   r   rb   s   &&     r   test_all_nograd_minimizers+TestBasinHopping.test_all_nograd_minimizers   s     --224%+" 44$**=$''!*-="'iidD X%a488CEE488A;<r   c           	     z   \        4       pVP                  p^p\        \        V P                  V,          V P
                  V P                  V P                  VR7      p\        VP                  V P                  V,          V P                  4       \        VP                  4       \        W!P                  8g  4       R# ri   )r   rc   rd   rj   N)r&   stepsizer	   r"   r`   rM   rc   rd   r   r   ra   rb   r   r)   )r,   takestepinitial_step_sizero   r   s   &    r   test_pass_takestep#TestBasinHopping.test_pass_takestep   s     =$--64771:!%$))%-/ 	CEE488A;9$$%!%6%667r   c           	        \         p^p\        \        V P                  V,          V P                  V P
                  V P                  VR7      p\        VP                  V P                  V,          V P                  4       R# r   )rB   r	   r   r`   re   rc   rd   r   r   ra   rb   )r,   r   ro   r   s   &   r   test_pass_simple_takestep*TestBasinHopping.test_pass_simple_takestep   sY    =$''!*,0,>,>!%$))%-/ 	CEE488A;9r   c           	         \        4       p^p\        \        V P                  V,          V P                  ^
V P
                  VR7       \        VP                  4       R# )ri   )r   rc   rd   rk   N)rD   r	   r"   r`   rM   rd   r   r)   )r,   rk   ro   s   &  r   test_pass_accept_test&TestBasinHopping.test_pass_accept_test  sD     #nVTWWQZ$++DII;	H''(r   c           	     &   \        4       p^p\        \        V P                  V,          V P                  ^V P
                  VR7      p\        VP                  4       \        RVP                  ^ ,          9   4       \        VP                  ^	4       R# )ri   )r   rc   rd   callbackr   N)rR   r	   r"   r`   rM   rd   r   r)   messager   nit)r,   r   ro   r   s   &   r   test_pass_callback#TestBasinHopping.test_pass_callback  sk     <64771:!#$))hH$$%
ckk!n,- 	SWWa r   c                    ^p\        ^ R7      V P                  R&   ^
p\        \        V P                  V,          V P                  W P
                  R7      p\        VP                  ^,           VP                  4       R# )ri   )maxiteroptionsr~   N)	dictrM   r	   r"   r`   rd   r   r   minimization_failures)r,   ro   rc   r   s   &   r   test_minimizer_fail$TestBasinHopping.test_minimizer_fail  s[    !%aI64771:!&YY8 	SWWq[#";";<r   c                |    ^ p\        \        V P                  V,          V P                  ^ V P                  R7       R# r|   )r	   r   r`   rM   rd   rn   s   & r   test_niter_zero TestBasinHopping.test_niter_zero'  s*    VTWWQZ$++499	.r   c           	        aa R RRR/p. oV3R lp\        \        RR.V^
V^
R7       . oV3R lp\        \        RR.V^
V^
R7       \        \        P                  ! S4      \        P                  ! S4      4       R# )	r]   r^   r_   Tc                 *   < SP                  V4       R # Nappend)r   r   rW   f_1s   &&&r   r   ;TestBasinHopping.test_rng_reproducibility.<locals>.callback3      JJqMr   r\   )r   rc   r   rngc                 *   < SP                  V4       R # r   r   )r   r   rW   f_2s   &&&r   	callback2<TestBasinHopping.test_rng_reproducibility.<locals>.callback2;  r   r   N)r	   r"   r   r   r   )r,   r   r   r   r   r   s   &   @@r   test_rng_reproducibility)TestBasinHopping.test_rng_reproducibility-  sz    $j%>	 	Vc3Z:Jb	: 	 	Vc3Z:J	r	;RXXc]BHHSM2r   c                &   \         P                  P                  ^4      pRRRR/p\        \        RR.V^
VR7      p\         P                  P                  ^4      p\        \        RR.V^
VR7      p\        VP                  VP                  4       R# )ri   r]   r^   r_   Tr\   )r   rc   r   N)r   r>   default_rngr	   r"   r   r   )r,   r   r   res1res2s   &    r   test_random_gen TestBasinHopping.test_random_genB  s    ii##A&$j%>FS#J-="$#/ ii##A&FS#J-="$#/ 	TVVTVV$r   c           	         ^ p\        \        V P                  V,          V P                  V P                  V P
                  ^ R7      p\        VP                  V P                  V,          V P                  4       R# )r}   )r   rc   rd   TNr   r   s   &  r   test_monotonic_basin_hopping-TestBasinHopping.test_monotonic_basin_hoppingR  sO    64771:!%$))qBCEE488A;9r   )rd   rM   re   rc   ra   rb   r`   N)	r   r   r^   r   r   zNelder-MeadPowellr   r   )r3   r4   r5   r6   rf   rp   ry   r   r   r   r   r   pytestmark	fail_slowr   parametrizer   r   r   r   r   r   r   r   r   r   r8   r9   rP   s   @r   rZ   rZ   j   s     4 %A:
)&": [[2> > [[2[[X (5 6=6 = 8:	)! 	=.3*% : :r   rZ   c                   t   a  ] tR tRt o R tR t]P                  P                  RRR.4      R 4       t	Rt
V tR	# )
Test_Storagei[  c                    \         P                  ! ^4      V n        ^ V n        \	        RR7      pV P                  Vn        V P                  Vn        \        V4      # )ri   Tsuccess)r   r   r`   f0r
   r   funr   )r,   minress   & r   create_storageTest_Storage.create_storage\  sB    ((1+-77WW
vr   c                   V P                  4       p\        R R7      pV P                  ^,           Vn        V P                  ^,           Vn        VP                  V4      pVP                  4       p\        V P                  VP                  4       \        V P                  VP
                  4       \        V'       * 4       R# )Tr   N)
r   r
   r`   r   r   r   update
get_lowestr   r   )r,   storage
new_minresretr   s   &    r   test_higher_f_rejected#Test_Storage.test_higher_f_rejectedf  s    %%'#D1
ww{
1
nnZ(##%TWWfhh'TWWfjj)Cr   r   TFc                n   V P                  4       p\        VR 7      pV P                  ^,           Vn        V P                  ^,
          Vn        VP                  V4      pVP                  4       pV P                  VP                  8g  V8X  g   Q hV P                  VP
                  8g  V8X  g   Q hWAJ g   Q hR# )r   N)r   r
   r`   r   r   r   r   r   )r,   r   r   r   r   r   s   &&    r   test_lower_f_accepted"Test_Storage.test_lower_f_acceptedr  s    %%'#G4
ww{
1
nnZ(##%688#///6::%'111~~r   )r   r`   N)r3   r4   r5   r6   r   r   r   r   r   r   r8   r9   rP   s   @r   r   r   [  s8     
 [[Yu6
 7
r   r   c                   ,   a  ] tR tRt o R tR tRtV tR# )Test_RandomDisplacementi  c                "    R V n         RV n        R# )r\   i N)r   NrI   s   &r   rf   $Test_RandomDisplacement.setup_method  s    r   c                   \         P                  P                  ^ 4      p\         P                  ! V P                  .4      p\        V P                  VR7      pV! V4      pRV P                  ,          ^,          ^,          p\        \         P                  ! V4      R^4       \        \         P                  ! V4      V^4       R# )r}   )r   r   r   rt   N)
r   r>   RandomStater!   r   r   r   r   meanvar)r,   r   r`   displacer   vs   &     r   test_random#Test_RandomDisplacement.test_random  s     ii##A&XXtvvh%t}}#FRL$--A%*BGGAJA.BFF1Iq!,r   )r   r   N)r3   r4   r5   r6   rf   r  r8   r9   rP   s   @r   r   r     s     
- 
-r   r   c                   P   a  ] tR tRt o R tR tR tR tR tR t	R t
R	 tR
tV tR# )Test_Metropolisi  c                    R V n         \        V P                   4      V n        \        RRR7      V n        \        RRR7      V n        R# )r   Trt   r   r   r\   N)r   r   metr
   res_newres_oldrI   s   &r   rf   Test_Metropolis.setup_method  s5    dff%%d;%d;r   c                    V P                  V P                  V P                  R 7      p\        V\        4      '       g   Q hR# r  r  N)r
  r  r  
isinstancebool)r,   r   s   & r   test_boolean_return#Test_Metropolis.test_boolean_return  s1     hht||T\\hB#t$$$$r   c                f    \        V P                  V P                  V P                  R 7      4       R# r  )r   r
  r  r  rI   s   &r   r   %Test_Metropolis.test_lower_f_accepted  s    t||DEr   c                    R pR p\        R4       FO  pV'       d   V'       d    M>\        RRR7      p\        RRR7      pV P                  WER7      pV'       d   RpKM  RpKQ  	  \        V4       \        V4       R# )Fi  Tr\   r	  r=   r  N)ranger
   r
  r   )r,   
one_accept
one_rejectro   r  r  r   s   &      r   test_acceptTest_Metropolis.test_accept  si    

tAj$Tr:G$Ts;G((7(<C!
!
  	

r   c                    \        ^4      p\        RRR7      p\        RRR7      p\        P                  ! RR7      ;_uu_ 4        VP	                  W#R7       RRR4       R#   + '       g   i     R# ; i)	   Trt   r	  i  raise)overr  N)r   r
   r   errstateaccept_rejectr,   r
  r  r  s   &   r   test_GH7495Test_Metropolis.test_GH7495  sT     m 26 48[[g&&g? '&&&s   A""A3	c                   aa R  oRp^2oRRRVV3R l/3p\        SV^\        P                  P                  R4      RV/R7      pVP                  '       g   Q h\        VP                  SRR	7       R
# )c                 Z    V ^,          ^,
          ^,          V ^,           ^,          ,           # )r   r   s   &r   func)Test_Metropolis.test_gh7799.<locals>.func  s!    qDFQ;!ax''r   typeineqr   c                 "   < S! V 4      S,
          # r   r(  )r   r*  limits   &r   <lambda>-Test_Metropolis.test_gh7799.<locals>.<lambda>  s    Q%r   r   constraints)r   r   gư>)rtolN)r	   r   r>   r   r   r   r   )r,   r`   conr   r*  r/  s   &   @@r   test_gh7799Test_Metropolis.test_gh7799  ss    	( vu&?@A&&t,+S1
 {{{{T2r   c                    \        ^ 4      p\        RRR7      p\        RRR7      pV! W#R7      '       g   Q hRVn        V! W#R7      '       d   Q hRVn        V! W#R7      '       g   Q hR# )r}   Trt   r	  r\   r  FN)r   r
   r   r#  s   &   r   test_accept_gh7799"Test_Metropolis.test_accept_gh7799  sh     m 26 26 74444w888874444r   c                x    R  pR pRRRRV/RRR.RR/p\        V^^.^
VR	7      pVP                  '       d   Q hR
# )c                     W ,          # r   r(  r)  s   &r   r   3Test_Metropolis.test_reject_all_gh7799.<locals>.fun  s	    3Jr   c                     V ^,           # )ri   r(  r)  s   &r   
constraint:Test_Metropolis.test_reject_all_gh7799.<locals>.constraint  s    q5Lr   r2  r,  eqr   boundsr]   slsqp)r`   rc   r   N)r}   ri   )r	   r   )r,   r   r?  rM   r   s   &    r   test_reject_all_gh7799&Test_Metropolis.test_reject_all_gh7799  sV    		  &$z!BVV,hA3Aq6fM;;;;r   )r   r
  r  r  N)r3   r4   r5   r6   rf   r  r   r  r$  r6  r9  rD  r8   r9   rP   s   @r   r  r    s4     <%F"@3&5" r   r  zshared state)reasonc                   >   a  ] tR tRt o R tR tR tR tR tRt	V t
R# )	Test_AdaptiveStepsizei  c                    R V n         \        V P                   R7      V n        RV n        \	        V P                  RV P                  R7      V n        R# )r\   )r   r=   F)r   verboseaccept_rateN)r   r   tsru   r   r   rI   s   &r   rf   "Test_AdaptiveStepsize.setup_method  s?    $dmm<"%($''5595L5LNr   c                ^   R pV P                  V4       V P                   P                  R4       \        V P                   P                  4       F/  pV P                  V4       V P                   P                  R4       K1  	  \	        V P
                  P                  V P                  8  4       R# )rt   FTNr   reportr  intervalr   rL  r   r,   r   ro   s   &  r   test_adaptive_increase,Test_AdaptiveStepsize.test_adaptive_increase  sy    aU#t}}--.AMM!MM  & / 	  4==01r   c                ^   R pV P                  V4       V P                   P                  R4       \        V P                   P                  4       F/  pV P                  V4       V P                   P                  R4       K1  	  \	        V P
                  P                  V P                  8  4       R# )rt   TFNrO  rR  s   &  r   test_adaptive_decrease,Test_AdaptiveStepsize.test_adaptive_decrease  sy    aT"t}}--.AMM!MM  ' / 	  4==01r   c                   R p\        V P                  P                  ^,           4       F/  pV P                  V4       V P                  P                  R4       K1  	  \	        V P
                  P                  V P                  8  4       R# )rt   TNr  r   rQ  rP  r   rL  r   rR  s   &  r   test_all_accepted'Test_AdaptiveStepsize.test_all_accepted  s`    t}}--12AMM!MM  & 3 	  4==01r   c                   R p\        V P                  P                  ^,           4       F/  pV P                  V4       V P                  P                  R4       K1  	  \	        V P
                  P                  V P                  8  4       R# )rt   FNrY  rR  s   &  r   test_all_rejected'Test_AdaptiveStepsize.test_all_rejected  s`    t}}--12AMM!MM  ' 3 	  4==01r   )r   r   ru   rL  N)r3   r4   r5   r6   rf   rS  rV  rZ  r]  r8   r9   rP   s   @r   rH  rH    s$     N2222 2r   rH  )%r7   r   numpy.testingr   r   r   r   r   r   rl   numpyr   r   r   scipy.optimizer	   r
   scipy.optimize._basinhoppingr   r   r   r   r   r   r"   r$   r&   rB   rD   rR   rZ   r   r   r  r   thread_unsaferH  r(  r   r   <module>rd     s    , ,  *   7? ?
	#$ 	# * $n: n:b" "J- -$Y Yx .1*2 *2 2*2r   