L i KndZddlZddlmZmZmZmZddlZddlmZ ddl Z ddl m Z m Z ddlmZmZddlmZmZmZmZdZd Zd Zd ZGd d eZdZGddZGddZGddZej>j@GddZ!GddZ"GddZ#GddZ$y)zA Unit tests for the basin hopping global minimization algorithm. N)assert_almost_equal assert_equalassert_assert_allclose)raises)cossin) basinhoppingOptimizeResult)StorageRandomDisplacement MetropolisAdaptiveStepsizectd|zdz |dz|zz}tjdtd|zdz zd|zzdz}||fS)N-@333333?皙?-@)rnparrayr xfdfs m/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/optimize/tests/test__basinhopping.pyfunc1drsX D1HsNq3w!m+A %#dQhn--Q6< =B b5Lcjtd|dzdz |ddz|dzz|ddz|dzz}|S)Nrrrr)r)rrs r func2d_nogradr!sJ D1Q4K# !A$*!!44!s ad7JJA Hrctd|dzdz |ddz|dzz|ddz|dzz}tjd}dtd|dzdz zd|dzzdz|d<d|dzdz|d<||fS) Nrrrr rrr)rrzerosr rs rfunc2dr%s D1Q4K# !A$*!!44!s ad7JJA !B Cqt c)* *R!A$Y 6   ~tRXXd^RA7 rc d|_|xjdz c_|jdz t|jkr|j|jdz Sy)NTr )r+rAlenrC)r.kwargss rr1zMyAcceptTest.__call__OsK q ;;?S. .<< a0 0rNr2r3r4r5r-r1rrr?r?Cs 7 rr?ceZdZdZdZdZy) 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 d|_d|_y)NFrr+rArDs rr-zMyCallBack.__init___s  rc\d|_|xjdz c_|jdk(ryy)NTr rM)r.rraccepteds rr1zMyCallBack.__call__cs, q ;;"  rNrHrIrrrKrKXs rrKceZdZdZdZdZdZdZdZdZ dZ e jjd d Ze jjd d Zd ZdZdZdZdZdZdZdZdZy)TestBasinHoppingcdddgf|_dtjddgf|_d|_d|_d|_ddd |_d di|_y ) z] Tests setup. Run tests based on the 1-D and 2-D functions described above. ?g(\ȿgdFL-BFGS-BTmethodjacrYN) x0rrsoltolniterdisprG kwargs_nogradrDs r setup_methodzTestBasinHopping.setup_methodls[ c #BHHfd^45  !+D9 & 3rcd}tttt|j|dtttt|j|dy)Nr ) take_step) accept_test) assert_raises TypeErrorr r%r[r.is rtest_TypeErrorzTestBasinHopping.test_TypeError|s? ivtwwqz ! # ivtwwqz"# %rc4d}tt|5tt|jdddddtt|5tt|jdddddd}tt|5tt|jdddddtt|5tt|jdddddy#1swYxYw#1swYxYw#1swY[xYw#1swYyxYw) Nz.target_accept_rate has to be in range \(0, 1\))matchr)target_accept_raterTz+stepwise_factor has to be in range \(0, 1\))stepwise_factor)re ValueErrorr rr[)r.msgs rtest_input_validationz&TestBasinHopping.test_input_validations@ :S 1 D  C D :S 1 D  C D> :S 1 A R @ A :S 1 A R @ A A D D D D A A A As/ C* C6 D D*C36C?D Dcd}tt|j||j|j|j }t |j|j||jyNrminimizer_kwargsr^r_ r rr[rGr^r_rrr\r]r.rhress r test_1d_gradzTestBasinHopping.test_1d_gradsL 64771: !%$))=CEE488A;9rcd}tt|j||j|j|j }t |j|j||jt|jdkDy)Nr rtr) r r%r[rGr^r_rrr\r]rnfevrws rtest_2dzTestBasinHopping.test_2ds\ 64771: !%$))=CEE488A;91 rc d}|jj}d|d<tt|j|||j |j }t|jdkDt|j|jy)Nr BFGSrYrtr) rGcopyr r%r[r^r_rr{rnjev)r.rhrurxs r test_njevzTestBasinHopping.test_njevso ;;++-%+"64771:,?'suu- 8C::>> HH &rcd}tt|j||j|j|j }t |j|j||jy)Nr rt) r r!r[r`r^r_rrr\r]rws rtest_2d_nogradzTestBasinHopping.test_2d_nogradsQ =$''!*,0,>,>!%$))= CEE488A;9rrOc,d}gd}tj|j}|D]j}||d<tt|j|||j |j }t|j|j||jly)Nr )CGr~z Newton-CGrWTNCSLSQPrYrt) rrGr r%r[r^r_rrr\r])r.rhmethodsrurYrxs rtest_all_minimizersz$TestBasinHopping.test_all_minimizerss I99T[[1 >F)/ X &vtwwqz0@%)ZZdiiAC txx{DHH =  >r(c Td}gd}tj|j}|D]~}|dk(rdn |j}||d<tt|j ||||j d}|j}|dk(rd }t|j|j|| y) Nr ) rr~rWrrz Nelder-MeadPowellCOBYLACOBYQArrOrY)rur^r_seedrr#)decimal) rr`r^r r!r[r_r]rrr\)r.rhrrurYr^rxr]s rtest_all_nograd_minimizersz+TestBasinHopping.test_all_nograd_minimizerss @99T%7%78 AF H,B$**E)/ X &}dggaj0@%*GC((C! txx{C @ Arcjt}|j}d}tt|j||j |j |j|}t|j|j||jt|jt||jk7yNr )rur^r_rc)r)stepsizer r%r[rGr^r_rrr\r]rr+)r.takestepinitial_step_sizerhrxs rtest_pass_takestepz#TestBasinHopping.test_pass_takesteps=$-- 64771: !%$))%-/ CEE488A;9$$%!X%6%667rct}d}tt|j||j|j |j |}t|j|j||jyr) r=r r!r[r`r^r_rrr\r])r.rrhrxs rtest_pass_simple_takestepz*TestBasinHopping.test_pass_simple_takestepsY =$''!*,0,>,>!%$))%-/ CEE488A;9rct}d}tt|j||jd|j |t |jy)Nr rO)rur^r_rd)r?r r%r[rGr_rr+)r.rdrhs rtest_pass_accept_testz&TestBasinHopping.test_pass_accept_testsD#n VTWWQZ$++DII; H ''(rct}d}tt|j||jd|j |}t |jt d|jdvt|jdy)Nr )rur^r_callbackrr ) rKr r%r[rGr_rr+messagernit)r.rrhrxs rtest_pass_callbackz#TestBasinHopping.test_pass_callback sk< 64771: !#$))hH$$% ckk!n,- SWWa rc d}td|jd<d|_tt|j ||j|j|j }t|jdz|jy)Nr r)maxiteroptionsrOrt) dictrGr^r r%r[r_rrminimization_failuresrws rtest_minimizer_failz$TestBasinHopping.test_minimizer_failsc !%a I 64771: !%$))= SWWq[#";";.callback3 JJqMrrTrO)rur^rrngc(j|yrr)rrrPf_2s r callback2z.callback2;rr)r r%rrr)r.rurrrrs @@rtest_rng_reproducibilityz)TestBasinHopping.test_rng_reproducibility-sv&0>  Vc3Z:Jb :  Vc3Z:J r ;RXXc]BHHSM2rc"tjjd}ddd}ttddg|d|}tjjd}ttddg|d|}t |j |j y)Nr rWTrXrTrO)rur^r)rr9 default_rngr r%rr)r.rrures1res2s rtest_random_genz TestBasinHopping.test_random_genBsii##A&&0>FS#J-="$#/ii##A&FS#J-="$#/ TVVTVV$rcd}tt|j||j|j|j d}t |j|j||jy)Nr)rur^r_Trvrws rtest_monotonic_basin_hoppingz-TestBasinHopping.test_monotonic_basin_hoppingRsO 64771: !%$))qBCEE488A;9rN)r2r3r4rarirqryr|rrrpytestmark fail_slowrrrrrrrrrrrrIrrrRrRjs4 % A: )&": [[2 > > [[2AA& 8: )! =. 3*% :rrRc`eZdZdZdZej jdddgdZy) Test_Storagectjd|_d|_t d}|j|_|j|_t||_y)Nr rTsuccess) rrr[f0r rfunr storage)r.minress rrazTest_Storage.setup_method]sC((1+-77WW v rcntd}|jdz|_|jdz|_|j j |}|j j}t|j|jt|j|jt| y)NTrr ) r r[rrrrupdate get_lowestrr)r. new_minresretrs rtest_higher_f_rejectedz#Test_Storage.test_higher_f_rejectedgs~#D1 ww{ 1 ll!!*-((*TWWfhh'TWWfjj)CrrTFcZt|}|jdz|_|jdz |_|j j |}|j j}|j|jk7|k(sJ|j|jk7|k(sJ||usJy)Nrr )r r[rrrrrr)r.rrrrs rtest_lower_f_acceptedz"Test_Storage.test_lower_f_acceptedrs#G4 ww{ 1 ll!!*-((*688#///6::%'111g~~rN) r2r3r4rarrr parametrizerrIrrrr[s5'  [[Yu 6 7 rrceZdZdZdZy)Test_RandomDisplacementc d|_d|_y)NrTi)rNrDs rraz$Test_RandomDisplacement.setup_methods rcjtjjd}tj|jg}t |j |}||}d|j zdzdz }ttj|ddttj||dy)Nr)rrrr# rlr ) rr9 RandomStater$rr rrmeanvar)r.rr[displacervs r test_randomz#Test_RandomDisplacement.test_randomsii##A& XXtvvh %t}}#F RL $-- A % *BGGAJA.BFF1Iq!,rN)r2r3r4rarrIrrrrs  -rrc<eZdZdZdZdZdZdZdZdZ dZ y ) Test_Metropoliscd|_t|j|_tdd|_tdd|_y)NrTrlrrrT)rrmetr res_newres_oldrDs rrazTest_Metropolis.setup_methods5dff%%d; %d; rcv|j|j|j}t|tsJyNrr)rrr isinstancebool)r.rs rtest_boolean_returnz#Test_Metropolis.test_boolean_returns.hht||T\\hB#t$$$rcdt|j|j|jyr)rrrrrDs rrz%Test_Metropolis.test_lower_f_acceptedst||DErcd}d}tdD]<}|r|rn6tdd}tdd}|j||}|rd};d}>t|t|y)NFiTrTrr8r)ranger rr)r. one_accept one_rejectrhrrrs r test_acceptzTest_Metropolis.test_acceptsp  t "Aj$Tr:G$Ts;G((7G(.funcs!qDFQ;!ax' 'r2ineqc|z SrrI)rrlimits rz-Test_Metropolis.test_gh7799..sQ%rtyperrr constraints)rrugư>)rtol)r rr9rrrr)r.r[conrxrr s @@r test_gh7799zTest_Metropolis.test_gh7799sm (&?@A   &&t,+S1  {{{T2rctd}tdd}tdd}|||sJd|_|||rJd|_|||sJy)NrTrlrrTrF)rr rrs rtest_accept_gh7799z"Test_Metropolis.test_accept_gh7799sem 26 267G444w8887G444rcdd}d}d|dddgdd}t|dd gd | }|jrJy) Nc ||zSrrIrs rrz3Test_Metropolis.test_reject_all_gh7799..funs Q3Jrc |dzS)Nr rIrs r constraintz:Test_Metropolis.test_reject_all_gh7799..constraints q5Lreqr )rr slsqp)rboundsrYr#rUrO)r[r^ru)r r)r.rrrGrxs rtest_reject_all_gh7799z&Test_Metropolis.test_reject_all_gh7799sJ  +/z!B#V,A3Aq6fM;;;rN) r2r3r4rarrrrrrrrIrrrrs,< % F"@3&5" rrc*eZdZdZdZdZdZdZy)Test_AdaptiveStepsizecd|_t|j|_d|_t |jd|j|_y)NrT)rr8F)rverbose accept_rate)rr tsrmrrrDs rraz"Test_AdaptiveStepsize.setup_methods? $dmm<"%($''5595L5LN rcXd}|j||jjdt|jjD].}|j||jjd0t |j j |j kDy)NrlFTrreportrintervalrr!rr.rrhs rtest_adaptive_increasez,Test_AdaptiveStepsize.test_adaptive_increases~  a U#t}}--. 'A MM!  MM  & '   4==01rcXd}|j||jjdt|jjD].}|j||jjd0t |j j |j ky)NrlTFr#r&s rtest_adaptive_decreasez,Test_AdaptiveStepsize.test_adaptive_decreases~  a T"t}}--. (A MM!  MM  ' (   4==01rcd}t|jjdzD].}|j||jjd0t |j j |j kDy)Nrlr Trrr%r$rr!rr&s rtest_all_acceptedz'Test_AdaptiveStepsize.test_all_accepted se t}}--12 'A MM!  MM  & '   4==01rcd}t|jjdzD].}|j||jjd0t |j j |j ky)Nrlr Fr+r&s rtest_all_rejectedz'Test_AdaptiveStepsize.test_all_rejectedse t}}--12 (A MM!  MM  ' (   4==01rN)r2r3r4rar'r)r,r.rIrrrrsN2222rr)%r5r numpy.testingrrrrrrrenumpyrrr scipy.optimizer r scipy.optimize._basinhoppingr r rrrr!r%r'r)r=r?rKrRr thread_unsaferrrrrIrrr4s ,, *7??   #$ # *$n:n:b   F--$YYx*2*2r