L i3TdZddlmZmZddlZddlZddlmZm Z ddl Z GddZ y)z. Unit test for DIRECT optimization algorithm. )assert_allcloseassert_array_lessN)directBoundsc eZdZdZdZdZdZdZdZe jjddd gd Z e jjddd gd Z e jjddd gd Ze jjddd gd Ze jjdddge jjddd gdZe jjdddge jjddd gdZe jjdgde jjddd gdZdZe jjddd gdZe jjddd gdZe jjddd gdZe jjddd gdZe jjddd ge jjdgdd Ze jj2e jjddd gd!Ze jjddd gd"Ze jjdd#d$gd%Ze jjdd#d$gd&Ze jjdd#d$gd'Ze jjd(gd)d*Ze jjd+gd)d,Z d-Z!d.Z"e jjd/gd0d1Z#e jjd/e$d2d#gd3d4ge$e%jL d#gd3e%jLggd5Z'd6Z(e jjdd7d8d8gd9gd:Z)y;)< TestDIRECTctj|_ddgz|_t j d|_d|_tddgddg|_ d|_ y)N)r gg@) threadinglocal fun_calls bounds_spherenpzerosoptimum_sphere_posoptimum_sphererbounds_stylinski_tangmaxiter)selfs f/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/optimize/tests/test_direct.py setup_methodzTestDIRECT.setup_methodsT"*y["$((5/!%+S#JR%A" ct|jdsd|j_|jxjdz c_tj|j S)Ncr)hasattrrrrsquaresumrxs rspherezTestDIRECT.spheresHt~~s+ DNN  Ayy|!!rcvtj|dk(r tdtj|z SNrr )rr#ZeroDivisionErrorr$s rinvzTestDIRECT.invs, 66!9>#% %{rc"tjSN)rnanr$s rnan_funzTestDIRECT.nan_fun" vv rc"tjSr,)rinfr$s rinf_funzTestDIRECT.inf_fun%r/rcd|\}}d|dzd|dzzz d|zz|dzzd|dzzz d|zzzS)Ng?r )rposr%ys rstyblinski_tangzTestDIRECT.styblinski_tang(sO1adR!Q$Y&Q.A5QT AAEIJJrlocally_biasedTFcZt|j|j|}t|j|j ddt|j |jddtj|j}t|dddf|jt|j|dddf|jdt|jdzzksJ|j|jjk(sJ|j|j ksJy) Nr;MbP?rtolatolh㈵>rAr@rr r)rr&rrr%rfunrrasarrayrnfevlenrrnitr)rr;res_boundss r test_directzTestDIRECT.test_direct,sT[[$"4"4$24 t66! .!4!44dK**T//0'!Q$-/#%%A/xx43t'9'9#:Q#>????xx4>>+++++ww$,,&&&rct|j|j|}d}t|j|j||}t|j|j|j |j k(sJ|j |j k(sJ|j|jk(sJ|j|jk(sJ|j|jk(sJt|j|j|j|jk(sJt|j|jddt|j|jddy)Nr=cPd|z}tj|}td|S)Nr5z+DIRECT minimization algorithm callback test)rr"print)r%dummys rcallbackz1TestDIRECT.test_direct_callback..callbackJs&!AIIaLE ? @Lr)r;rPr>r?rBrC) rr&rrr%rHrFstatussuccessrDmessagerr)rr;rIrP res_callbacks rtest_direct_callbackzTestDIRECT.test_direct_callbackDs4T[[$"4"4$24  dkk4+=+=-;'/1  |~~.ww,*****xx<,,,,,zz\00000{{l22222ww,*****|~~.{{l22222  (?(?! . (($*=*=! .rcddgz}tjt5t|j||dddy#1swYyxYwNr )i )boundsr;)pytestraisesr)rr*rr;rYs rtest_exceptionzTestDIRECT.test_exceptiondsBI; ]], - 2 488F"0 2 2 2 2s AA c@ddgz}t|j||yrW)rr.r\s rtest_nanzTestDIRECT.test_nanks I;t||F, .rlen_tolr>-C6?cddgz}t|j||d|}|jdk(sJ|jsJt |j t jdd|}|j|k(sJy)Nr g$$@gKH9)rYr`vol_tolr;r6r zjThe side length measure of the hyperrectangle containing the lowest function value found is below len_tol= rr&rQrRrr%rrrS)rr`r;rYrIrSs r test_len_tolzTestDIRECT.test_len_tolqsK=T[[">CzzQ{{{rxx/%Y({{g%%%rreư>g:0yE>cddgz}t|j||d|}|jdk(sJ|jsJt |j t jdd|}|j|k(sJy)Nr rcr)rYrer`r;r z]The volume of the hyperrectangle containing the lowest function value found is below vol_tol=rf)rrer;rYrIrSs r test_vol_tolzTestDIRECT.test_vol_tolsK=T[[@zzQ{{{rxx/<rBgHz>cd}ddgz}t|j||||}|jdk(sJ|jsJ|j|d|zzksJd|d}|j |k(sJy)N?r )rd)rYf_minrkr;r z9The best function value found is within a relative error=z$ of the (known) global optimum f_min)rr&rQrRrDrS)rrkr;rorYrIrSs r test_f_minzTestDIRECT.test_f_mins J<T[[u *$24zzQ{{{ww"z/2222&<'KM{{g%%%rctj|d|z tj|d|z jzSr()rr"r#)rr%abs rcircle_with_argszTestDIRECT.circle_with_argss8yy1"RYYqtax%8%<%<%>>>rcddgz}t|j|dd|}t|jt j ddgdy) Nr5)rn@)r r i)argsmaxfunr;rmrBr@)rrtrr%rarray)rr;rYrIs rtest_f_circle_with_argsz"TestDIRECT.test_f_circle_with_argssEK=T**F$24rxxR1=rcd}t|j|j||}|jdusJ|jdk(sJ|j |k\sJd|}|j |k(sJy)Nd)rxr;Fr z:Number of function evaluations done is larger than maxfun=)rr:rrRrQrFrS)rr;rxresultrSs rtest_failure_maxfunzTestDIRECT.test_failure_maxfuns ,,d.H.H%nF~~&&&}}!!!{{f$$$))/2~~(((rcd}t|j|j||}|jdusJ|jdk(sJ|j |k\sJd|}|j |k(sJy)NrX)rr;Fr5z,Number of iterations is larger than maxiter=)rr:rrRrQrHrS)rr;rr~rSs rtest_failure_maxiterzTestDIRECT.test_failure_maxiters} ,,d.H.H 'H~~&&&}}!!!zzW$$$@ J~~(((rc,gd}gd}tjgd}tt||}t ||}t |j ||}t |j ||}|j|jk(sJ|j|jk(sJ|j|jk(sJ|j|jk(sJt|j|jt|j|dy)N)grm)g@@)rrmrr=g{Gz?ry) rrzlistziprrr&rFrSrRrHrr%) rr;lbubx_opt bounds_old bounds_newres_old_boundsres_new_boundss rtest_bounds_variantszTestDIRECT.test_bounds_variantss '#b"+& B^  Z/=? Z/=?""n&9&9999%%)?)????%%)?)????!!^%7%7777((.*:*:;((%d;reps)rBrar>ct|j|j|d|}|jdk(sJ|jsJy)Nrh)rrer;r )rr:rrQrR)rrr;r~s r test_epsilonzTestDIRECT.test_epsilonsF,,d.H.H'57}}!!!~~~rcLdgdz}t|j|dd|}|Jy)N)rg4@r}ii@B)rxrr;)rr&rr;rYr~s rtest_no_segmentation_faultz%TestDIRECT.test_no_segmentation_faults6 # VH 'H!!!rcHdgdz}t|j||}|Jy)N)rrr5r=)rr2rs r test_inf_funzTestDIRECT.test_inf_funs0q f'57!!!rr5cd}tjt|5t|j|j |dddy#1swYyxYw)Nz len_tol must be between 0 and 1.match)r`rZr[ ValueErrorrr:r)rr` error_msgs rtest_len_tol_validationz"TestDIRECT.test_len_tol_validationE6 ]]:Y 7 $ 4'')C)C" $ $ $ $ #A  Acd}tjt|5t|j|j |dddy#1swYyxYw)Nz vol_tol must be between 0 and 1.r)rer)rrers rtest_vol_tol_validationz"TestDIRECT.test_vol_tol_validationrrcd}tjt|5t|j|j |ddddy#1swYyxYw)Nz#f_min_rtol must be between 0 and 1.rr)rkror)rrkrs rtest_fmin_rtol_validationz$TestDIRECT.test_fmin_rtol_validationsG9 ]]:Y 7 4 4'')C)C( 4 4 4 4s $A  Arx)g?string)r r5cd}tjt|5t|j|j |dddy#1swYyxYw)Nzmaxfun must be of type int.rrxr)rrxrs rtest_maxfun_wrong_typez!TestDIRECT.test_maxfun_wrong_type sE1 ]]:Y 7 " 4'')C)C  " " " "rrcd}tjt|5t|j|j |dddy#1swYyxYw)Nzmaxiter must be of type int.rrr)rrrs rtest_maxiter_wrong_typez"TestDIRECT.test_maxiter_wrong_typesE2 ]]:Y 7 $ 4'')C)C" $ $ $ $rcd}tjt|5t|j|j ddddy#1swYyxYw)Nzmaxiter must be > 0.rrrrrrs rtest_negative_maxiterz TestDIRECT.test_negative_maxitersE* ]]:Y 7  4'')C)C    rcd}tjt|5t|j|j ddddy#1swYyxYw)Nzmaxfun must be > 0.rrrrrs rtest_negative_maxfunzTestDIRECT.test_negative_maxfunsE) ]]:Y 7  4'')C)C    rrY)rYrvrcd}tjt|5t|j|dddy#1swYyxYw)Nz5bounds must be a sequence or instance of Bounds classrrZr[rrr:rrYrs rtest_invalid_bounds_typez#TestDIRECT.test_invalid_bounds_type%s<0 ]]:Y 7 1 4'' 0 1 1 1 >Arr r cd}tjt|5t|j|dddy#1swYyxYw)Nz#Bounds are not consistent min < maxrrrs rtest_incorrect_boundsz TestDIRECT.test_incorrect_bounds,s< : ]]:Y 7 1 4'' 0 1 1 1rcd}ttj dgdtjg}tjt |5t |j|dddy#1swYyxYw)NzBounds must not be inf.rr r)rrr1rZr[rrr:)rrrYs rtest_inf_boundszTestDIRECT.test_inf_bounds6sX- "&&" BFF|4 ]]:Y 7 1 4'' 0 1 1 1s A++A4biasrrvcd}tjt|5t|j|j |dddy#1swYyxYw)Nz%locally_biased must be True or False.rr=r)rr;rs rtest_locally_biased_validationz)TestDIRECT.test_locally_biased_validation<sE; ]]:Y 7 2 4'')C)C"0 2 2 2 2rN)*__name__ __module__ __qualname__rr&r*r.r2r:rZmark parametrizerKrUr]r_rgrjrprtr{rrrrxslowrrrrrrrrrrrrr-rrrr7rrrr sz"  K [[-e}='>'. [[-e}=.>.> [[-e}=2>2  [[-e}=.>.  [[Yt 5 [[-e}= &>6 & [[Yt 5 [[-e}= &>6 & [[\+=> [[-e}= &>? &? [[-e}=>>> [[-e}= )> ) [[-e}= )> ) [[-e}=<><* [[-e}= [[U$678> [[ [[-e}=">" [[-e}=">" [[YQ0$1$  [[YQ0$1$  [[\B73444  [[X'>?"@"  [[Y(?@$A$    [[X'891:1  [[X$c2YQ8$rvvgr]RLA  1  1 1  [[-A/CD2E2rr) __doc__ numpy.testingrrrZnumpyrscipy.optimizerrrrr7rrrs'. )u2u2r