L i,dZddlmZmZmZmZmZddlmcm Z ddlm Z ddl Z ddlZddlZd dZd dZdZdZdd ZGd d Zy)z Tests for line search routines ) assert_equalassert_array_almost_equalassert_array_almost_equal_nulp assert_warnssuppress_warningsN)LineSearchWarningc ||}|d}|d}||} d|d|d|d|d| d| } ||||z|zzks Jd| zt| t||zks Jd | zy ) z2 Check that strong Wolfe conditions apply rs = ; phi(0) = ; phi(s) = z ; phi'(0) = z ; phi'(s) = ; zWolfe 1 failed: zWolfe 2 failed: N)abs) sphiderphic1c2err_msgphi1phi0derphi0derphi1msgs j/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/optimize/tests/test_linesearch.py assert_wolfers q6D q6DQiGQiG !Kv[l7)L G9 .C 4"Q$w,& &@(:S(@@ & w<3r'z? *D,>,DD *cj||}|d}d|d|d|d|}|d||zz |zksJ|y)z- Check that Armijo condition applies rr r r r N)rrrrrrrs r assert_armijor sS q6D q6D ;tfKvRy AC A1Hd? "'C' "rc >t|ffdfdd|y)Nc |zzSNrspfpxs rz#assert_line_wolfe..(s1Q2X;rcHtj|zzSr#npdot)r%fprimer'r(s rr)z#assert_line_wolfe..)s266&QrT*:A#>r)rr)r)r(r'rr&r.kws`` `` rassert_line_wolfer0's#F.>FBDFrc 0t|fdfdi|y)Nrc |zzSr#rr$s rr)z$assert_line_armijo..-sAa!B$hKr)r )r(r'rr&r/s`` ` rassert_line_armijor3,s!6/626rcd t|||y#t$r}t|d||d}~wwxYw)zEAssert two arrays are equal, up to some floating-point rounding error N)rAssertionError)r(yrnulpes rassert_fp_equalr:0s;7&q!T2 7s"WI./Q67s  /*/ceZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZej&j(dZdZdZdZy)TestLineSearchct|jdsd|j_|jxjdz c_| |dzz |dzz}dd|dzzz d|dzzz}||fS)Ncrr)hasattrfcountr>selfrr'dps r_scalar_func_1zTestLineSearch._scalar_func_1:slt{{C(DKKM  BAI1  !AqD&[1QT6 !"u rct|jdsd|j_|jxjdz c_tjd|z|dzz}dtjd|zzd|zz}||fS)Nr>rrrB)rCrDr>r,exprEs r_scalar_func_2zTestLineSearch._scalar_func_2Bsnt{{C(DKKM  FF2a4L1a4  r!t _qs ""u rct|jdsd|j_|jxjdz c_tjd|z }dtj d|zz}||fS)Nr>rr i)rCrDr>r,sincosrEs r_scalar_func_3zTestLineSearch._scalar_func_3Js_t{{C(DKKM  VVBqD\M 1 "u rct|jdsd|j_|jxjdz c_tj||}d|z}||fS)Nr>rrrB)rCrDr>r,r-rFr(r&dfs r _line_func_1zTestLineSearch._line_func_1TsNt{{C(DKKM  FF1aL qS"u rcrt|jdsd|j_|jxjdz c_tj|tj|j |dz}tj|j |j j z|}||fS)Nr>rr)rCrDr>r,r-ATrSs r _line_func_2zTestLineSearch._line_func_2\s{t{{C(DKKM  FF1bffTVVQ' (1 , VVDFFTVVXX%q )"u rc pg|_g|_d|_tj|_d}t t|D]}|jdr9t||}|jj|||d||dfM|jds_t||}|jj|||d||dftjjdtjj|j|j|_y)NcfdS)Nc|i|Sr#r)ar/funcidxs rr)zATestLineSearch.setup_method..bind_index..nsD!NrN3$7rr)r_r`s``r bind_indexz/TestLineSearch.setup_method..bind_indexls 7 7r _scalar_func_rr _line_func_) scalar_funcs line_funcsN threadinglocalrDsorteddir startswithgetattrappendr,randomseedrandnrW)rFranamevalues r setup_methodzTestLineSearch.setup_methodfsoo'  83t9% HD/d+!!((:eQ/E11EFH/d+&&:eQ/E11EFH H t0rc#K|jD]2\}}}tjjdD] }||||f 4yw)Nr?)rer,rorq)rFrrrrold_phi0s r scalar_iterzTestLineSearch.scalar_iter}sM!%!2!2 2 D#vIIOOA. 2C11 2 2sAAc#Ktjjd}|jD]\}}}d}|dks|j |j }|j |j }tj |||dk\r\|dz }t|j }||||||f|dkryw)Nrdr r)r,ro RandomStaterfrqrgr-float) rFrngrrr&r.kr(r'old_fvs r line_iterzTestLineSearch.line_itersii##D)# 4OD!VAa%IIdff%IIdff%66!VAY'1,Qsyy{+Avq!V33a% 4s:CBCCc d}|jD]j\}}}}|dz }tj|||d||d\}}}t||d|t||||t ||||l|dkDsJy)Nrrrr?)rwlsscalar_search_wolfe1r:r) rFr>rrrrrvrrrs rtest_scalar_search_wolfe1z(TestLineSearch.test_scalar_search_wolfe1s +/+;+;+= 7 'D#vx FA33CQ4.phisAI!# #rcd|dz zS)NrBrrrs rrzFTestLineSearch.test_scalar_search_wolfe2_with_low_amax..derphis ? "rgMbP?amaxrr)rFrr alpha_star_ derphi_stars r'test_scalar_search_wolfe2_with_low_amaxz6TestLineSearch.test_scalar_search_wolfe2_with_low_amaxsD $ #)+(?(?VRW(X% Aq+!!!"""rcTd}d}tj||\}}}}|dksJy)Nc|dkrdtjzdz |dz zStjdtjzdz |ztjz SNrrBr?)r,pirPrs rrz@TestLineSearch.test_scalar_search_wolfe2_regression..phisMqy255y{eai00vvagai%/"%%788rc|dkrdtjzdz Sdtjzdz tjdtjzdz |ztjz zSr)r,rrOrs rrzCTestLineSearch.test_scalar_search_wolfe2_regression..derphisUqy255y{"255y{RVVAbeeGAI,=,E%FFFrg?r)rFrrrrs r$test_scalar_search_wolfe2_regressionz3TestLineSearch.test_scalar_search_wolfe2_regressions6 9  G ,,S&9 1a3wwrc |jD]T\}}}}tj||d|d\}}t||||t |||d|dVyr)rwrscalar_search_armijor:r )rFrrrrrvrrs rtest_scalar_search_armijoz(TestLineSearch.test_scalar_search_armijosn+/+;+;+= B 'D#vx--c3q66!9EGAt D#a&$ / !STF!HQ<*@ A Brc d}d}|jD]\}}}}}}||} ||} d|j_tj||||| | ||\} } } }}}t |jj| | zt |||| t |||| |zzt|||| |zzd| |ks|dz }t||| ||||dkDsJy) Nrdrdecimalrrr?) rrDr>rline_search_wolfe1rr:rr0)rFr>smaxrrr&r.r(r'old_ff0g0rfcgcfvofvgvs rtest_line_search_wolfe1z&TestLineSearch.test_line_search_wolfe1s  ,0NN,< D (D!VQ51BBDKKM%'%:%:1fa;=r5@D&F "Ar2r3 2 . C1 &y B!ac' + %b&QqS/2 F4xQ!!Q1fdC D"1u urc d}d}|jD]\}}}}}}||} ||} d|j_t5} | j t d| j t dt j||||| | ||\} } }}}}dddt|jj zt||t|| |zzt|||| |zzd| |ks|dz }t||| ||| |d kDsJy#1swYxYw) Nriz3The line search algorithm could not find a solutionz*The line search algorithm did not convergerrrrrr?) rrDr>rfilterrrline_search_wolfe2rr:rr0)rFr>rrrr&r.r(r'rrrsuprrrrrrs rtest_line_search_wolfe2z&TestLineSearch.test_line_search_wolfe2sM ,0NN,< D (D!VQ51BBDKKM"$ J ,PR ,GI)+)>)>q&!Q?A2uDH*J&2r2sB  J 2 . C1 & B!ac' +~)"fQ1WorJ4xQ!!Q1fdC' D(1u u! J Js AD44D= c Xd}d}tjddg}d|z}d}tj||||d|\}}}}}}t |||||t t tj||||d |\}}}}}}|Jt t tj|||||d y) Nc.tj||Sr#r+r(s rr&z8TestLineSearch.test_line_search_wolfe2_bounds..fs66!Q< rc d|zS)NrBrrs rfpz9TestLineSearch.test_line_search_wolfe2_bounds..fps q5Lrrrig?)rrr)rmaxiter)r,arrayrrr0rr)rFr&rr'r(rrrs rtest_line_search_wolfe2_boundsz-TestLineSearch.test_line_search_wolfe2_boundss   HHaV  !G 00B12"M1aAq!Q1b)'(9(*(=(=q"a-/B81aAqyy &(=(=q"aA 'rc dd}|jD]\}}}}}}||}||} d|j_tj|||| |\} } } |dz }t |jj| t | ||| |zzt||| |||dk\sJy)Nrrrry)rrDr>rline_search_armijorr:r3) rFr>rrr&r.r(r'rrrrrrs rtest_line_search_armijoz&TestLineSearch.test_line_search_armijos ,0NN,< 9 (D!VQ51BBDKKM--aAr2>IAr2 FA  + B!ac' + q!Q4 8 9Av vrcdgfd}tj||ddd\}}t|dtddt||y)Nrc6dxxdz cc<| d|dzzzS)Nrrg{Gz?rBrrcounts rrz3TestLineSearch.test_armijo_terminate_1..phi/$ !HMH2QT > !rrAr)alpha0rB)rrrr )rFrrrrs @rtest_armijo_terminate_1z&TestLineSearch.test_armijo_terminate_1*sS "))#s1vr!D4QU1Xq!arc fd}fd}tjtjfD]W}dg||||dd|d}|d J||fddks J|ft|d||t |Yy)Nc6dxxdz cc<| d|dzzzS)Nrrg?rBrrs rrz0TestLineSearch.test_wolfe_terminate..phi;rrc.dxxdz cc<dd|zzS)NrrrAg?rrs rrz3TestLineSearch.test_wolfe_terminate..derphi?s !HMHq= rrr@r)rrrrstr)rFrrr_rrs @rtest_wolfe_terminatez#TestLineSearch.test_wolfe_terminate7s " !,,b.E.EF ?DCES&#a&$q :AQ4# .aY .#8u$ 3udm 3$ 1sFCI >  ?rN)__name__ __module__ __qualname__rHrLrQrUrYrtrwrrrrrrrrpytestmark thread_unsaferrrrrrrr<r<8s|1.2 4 I #(B,2 [[''8  ?rr<)-C6?g?)rr)r2)__doc__ numpy.testingrrrrrscipy.optimize._linesearchoptimize _linesearchrrnumpyr,rrhrr r0r3r:r<rrrrsO..('8  E(F 77P?P?r