L iOdZddlmZddlZddlmZddlmZm Z ddl m Z ddl m Z mZddlmZddl ZddlZdd lmZd d lmZej.ej0ej2ej4ej6ej8ej:d Zej.ej6ej8ej:d ZdZ gde _!ie _"ie _#ie _$dZ%gde%_!ej2ej4de%_"ie%_#ie%_$dZ&gde&_!ie&_"ie&_#ie&_$dZ'gde'_!ie'_"ie'_#ie'_$dZ(ddge(_!ej2ej4ej0de(_"dhe(_#hde(_$dZ)gde)_!ej4ej2ej0de)_"d dhe)_#dhe)_$d!Z*d"d#ge*_!ej4ej2ej0de*_"ie*_#ie*_$Gd$d%Z+Gd&d'Z,Gd(d)Z-Gd*d+Z.Gd,d-Z/y).zA Unit tests for nonlinear solvers Author: Ondrej Certik May 2007 )assert_N)partial)_nonlinroot) csr_array)diagdot)invminres)pressure_network)anderson diagbroyden linearmixingexcitingmixingbroyden1broyden2krylov)rrrrctj|j}tgd}d}| |z|t |j|zz|zz }|S)N)g?r ?{Gz?)npasarrayTrfloat)xdcfs f/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/optimize/tests/test_nonlin.pyFr$"sN 1 A !A A QU1337^#a''A H)r r r r r c|SNrs r#F2r*0 Hr%)r rr)rrc|Sr'r(r)s r#F2_luckyr0;r+r%)rrrrrrc|tjgdgdgdg}tjgd}||z|z S)N)r )r r2r )rr r2)r r@)rarrayrAbs r#F3r9Es3 +z:67A A q519r%)r rrcd}||dz|dzdz tj|d tj|d zdd|z zz gS)Ng@rr )rexp)rr7s r# F4_powellr<QsT A adF1Q4K!ORVVQqTE]RVVQqTE]:a!A#gF GGr%r2)rrrr >cgsgmrestfqmrr bicgstabcFt|dtjgdS)Nr,)rrrr)rrr5r)s r#F5rCas Aq"((+;"< ==r%)@rrr)rrrr>c (|\}}tjddgddgg}tj|dz|dzdz zdztj|tj|zd z g}tjj || S) Ng/$gffffff-@g+,?grD0?rr-r )rr5sinr;linalgsolve)rx1x2J0vs r#F6rOps FB FD>z*, -B 26b!eai(3.&&bffRj1,-/ 0A IIOOB " ""r%ggffffff?creZdZdZddZddZejjdZ ejjddZ ejjdejjdgdd Z ejjdd Zd Zd Zd Zy) TestNonlinz Check the Broyden methods for a few test problems. broyden1, broyden2, and newton_krylov must succeed for all functions. Some of the others don't -- tests in KNOWN_BAD are skipped. c ||tdk(rddD]_}||jvr|||j|d|dd}tt j ||j |ka|||j|dd}tt j ||j |ky)Nrr?rAr>r r@r)method line_searchf_tolmaxiterverbose)rWrXrY)SOLVERS JAC_KSP_BADxinrrabsolutemax)selfr"funcrWrUrs r#_check_nonlin_funczTestNonlin._check_nonlin_funcs 78$ $I 9Q]]*AEE&d$c1> AaD)--/%78  9 AEEQ ? AaD!%%'%/0r%c |dk(rodD]j}||jvrt||j||ddd|id}tt j |j j|klt||j||ddd}tt j |j j|ky) NrrSrTrrU)ftolrXdisp jac_optionsrUoptions)rcrXrd)ROOT_JAC_KSP_BADrr\rrr]funr^)r_r"rUrW jac_methodress r# _check_rootzTestNonlin._check_roots X M < !3!331aeeF,1c,-4r r@c d_fd}tjttj|ddd|t jy)NFcXd_tj|jS)NT)_tol_norm_usedrr]r^)rr_s r#local_norm_funcz8TestNonlin.test_tol_norm_called..local_norm_funcs""&D ;;q>%%' 'r%rrTr)rUrWrXrYtol_norm)rynonlin newton_krylovr$r\r)r_rUrzs` r#test_tol_norm_calledzTestNonlin.test_tol_norm_calledsF $ ( QfD%(!&5 7 ##$r%ctttttt t fD]H}tD]=}||jvr|tvr|j||,|j||?Jyr') r$r*r0r9r<rCrOrZrsrtrprl)r_r"meths r#test_problem_rootzTestNonlin.test_problem_rootsfR2y"b9 *A *1;;&y(--a6  D)  * *r%cd}tjtjj5t j |dgddddy#1swYyxYw)Nc d|zS)Ng@@r(r)s r# wont_convergez5TestNonlin.test_no_convergence..wont_converges 7Nr%rr )r\rX)pytestraisesscipyoptimize NoConvergencer|r})r_rs r#test_no_convergencezTestNonlin.test_no_convergencesL ]]5>>77 8 D  QC C D D Ds AAcntjtd5tjt t j dddddtjt t j ddd d }tjt t j | y#1swYdxYw) a Test for ENH #21986, for behavior of `nonlin.newton_krylov` Test the following scenarios: 1. Raise warning for invalid inner param 2. No warning for valid inner param 3. No warning for user-provided callable method z'Please check inner method documentationmatchr h㈵>)rU inner_atolNdcy)N.r()_s r#z>TestNonlin.test_warnings_invalid_inner_param..sr%)rU inner_maxiterinner_callbackct||fi|S)z2A dummy user-provided callable method for testing.r )oprhskwargss r#'user_provided_callable_method_enh_21986z]TestNonlin.test_warnings_invalid_inner_param..user_provided_callable_method_enh_21986s"c,V, ,r%)rU)rwarns UserWarningr|r}r$r\)r_rs r#!test_warnings_invalid_inner_paramz,TestNonlin.test_warnings_invalid_inner_params\\+ IK M  AEE(t L M Qhc-; = - Q$K M M Ms ,B++B4ctjtd5tjt t j dddddy#1swYyxYw)NzUnknown parameterrr r)rU invalid_param)rr ValueErrorr|r}r$r\r_s r#test_non_inner_prefixz TestNonlin.test_non_inner_prefixsF ]]:!4 P  AEE($ O  P P Ps ,AAN)r)__name__ __module__ __qualname____doc__rarlrmarkxfailrpfilterwarningsru parametrizer~rrrrr(r%r#rQrQs 14" [[   [[ <=1>1 [[ <= [[X(;< %<> % [[ <=*>*DM8Pr%rQc eZdZdZej gdej gdej gdej gdej gdej gdej gdej gd gZeDcgc] }|d zd z  c}}Zdd Zd Z dZ dZ dZ dZ ycc}}w) TestSecantzDCheck that some Jacobian approximations satisfy the secant condition)?rDr4@@)rDr4rrr)r4rrrrD)rrrrDr4)"@rrrr4)r3rrrr4)rr@rr)rrDrrrrr c J|di|}|j|jd|jddtt |jdd|jddD];\}\}}|j ||t t||dzD]}|j||z dz|j||z z } |j||z dz|j||z z } ttj| |j| ||k\s|j||z dz|j||z z } |j||z dz|j||z z } ttj| |j|  >y)z| Check that the given Jacobian approximation satisfies secant conditions for last `npoints` points. rNr r() setupxsfs enumeratezipupdaterangeminrrallcloserJ) r_jac_clsnpointsrojacjrr"kdxdfs r# _check_secantzTestSecant._check_secantsq mm $''!*dggaj$/"3twwqr{DGGABK#@A >WWQwYq[)DGGAgI,>>BKKCIIbM::; .func[sq!9q= r%ư>rrXrWrVrYr) rrandomseedrandnr| nonlin_solvezerosrrr ) r_rNrXcomplexror`solr7r8s @@r#_checkzTestLinear._checkQs s IIOOAq ! Bryyq!,,,A IIOOA  Bryyq)))A !!!$ S'(,$K C3K67r%c|jtjdddd|jtjddddyNrr)FT)rr|rrs r#rzTestLinear.test_broyden1bs< F''c2BEB F''c2BDAr%c|jtjdddd|jtjddddyr)rr|rrs r#rzTestLinear.test_broyden2gs< F((s3RUC F((s3RTBr%c|jtjddddd|jtjdddddy)N2r)rrrFT)rr|rrs r#rzTestLinear.test_andersonls< FOOb4b"eD FOOb4b"dCr%c|jtjdddd|jtjddddy)NrrF )inner_mT)rr|KrylovJacobianrs r# test_krylovzTestLinear.test_krylovqs: F))2q% D F))2q$ Cr%c fd}fd}tj|tjjd|dddd}tj j |zdtj|tjjddddd}tj j |zdy)Nc,j|z Sr'rr6s r#r`z'TestLinear._check_autojac..funcws558a< r%cSr'r()rNr7s r#rz&TestLinear._check_autojac..jaczsHr%rrrrr)r|rrrshapetestingassert_allclose)r_r7r8r`rrs `` r#_check_autojaczTestLinear._check_autojacvs  !!$(.rands2! A8388Q<'Hr%ct||z j}t|jzz}||kDrt|d|dy)Nz: err g)absr^AssertionError)rnr8msgr r"tols r# assert_closez5TestJacobianDotSolve._check_dot..assert_closesTAE  Ac!fjjl3&&A1u$uF1Q%%899r%)r7r __array__rJzsolve vs arrayrsolvezrsolve vs arraymatvecz dot vs arrayrmatveczrmatvec vs arrayz dot vs solvezrmatvec vs rsolver()rr RandomStaterrrrrhasattrr5rJrIrrconjr r r!r)r_rrrrorrrr7x0rrrNJdGvGv2JvJv2rrs `` @r# _check_dotzTestJacobianDotSolve._check_dots>ii##C(    : AJXXa[mm "djjQ'q)ABqs! ,AQAsK(XXc]3(1B))//"a0C S*:;3)AB))//"$$))+q9C S*;<3)AB&&Q-C S.93 *QB&&a0C S*<=sH%'#w*?ZZ]ii 2/Rn5sI&73+A[[^kk#**R.1R&9:QA JJq$**Q* +C! ,r%c|jtjd|jtjdyNF)rT)r+r|rrs r#rz"TestJacobianDotSolve.test_broyden1. ++U; ++T:r%c|jtjd|jtjdyr-)r+r|rrs r#rz"TestJacobianDotSolve.test_broyden2s. ,,e< ,,d;r%c|jtjd|jtjdyr-)r+r|rrs r#rz"TestJacobianDotSolve.test_andersons* 7 6r%c|jtjd|jtjdyr-)r+r| DiagBroydenrs r#test_diagbroydenz%TestJacobianDotSolve.test_diagbroydens. **E: **D9r%c|jtjd|jtjdyr-)r+r| LinearMixingrs r#test_linearmixingz&TestJacobianDotSolve.test_linearmixingr.r%c|jtjd|jtjdyr-)r+r|ExcitingMixingrs r#test_excitingmixingz(TestJacobianDotSolve.test_excitingmixings. --u= --t)r|rr$r\rnormr_rs r#rz TestNonlinOldTests.test_broyden1I OOAquu2Q 7 A%& AaD!D()r%ctjttjdd}t tj |dkt tj t|dkyr?)r|rr$r\rrDrEs r#rz TestNonlinOldTests.test_broyden2rFr%ctjttjddd}t tj |dky)Nr@Q?r-)rBrrQ?)r|rr$r\rrDrEs r#rz TestNonlinOldTests.test_andersons1 OOAquu2TQ ? A%&r%ctjttjdd}t tj |dkt tj t|dky)N<rrAHz>)r|rr$r\rrDrEs r#r6z$TestNonlinOldTests.test_linearmixingsK   155r = A%& AaD!D()r%ctjttjdd}t tj |dkt tj t|dky)NrrrAr)r|rr$r\rrDrEs r# test_excitingz TestNonlinOldTests.test_exciting sK  ! !!QUU3 ? A%& AaD!D()r%ctjttjdd}t tj |dkt tj t|dky)N r rA:0yE>)r|rr$r\rrDrEs r#r3z#TestNonlinOldTests.test_diagbroydensK   q!%%b : A%& AaD!D()r%ctttjddddid}tt j |j dktt j |jdky)Nrr@rr nitrerfrCrr$r\rr|rDrrir_rks r#test_root_broyden1z%TestNonlinOldTests.test_root_broyden1W1aeeJ#%wlCE CEE"T)* CGG$t+,r%ctttjddddid}tt j |j dktt j |jdky)Nrr@rr rTrfrCrVrWs r#test_root_broyden2z%TestNonlinOldTests.test_root_broyden2rYr%c tttjdddddd}tt j |j dky) Nrr@rIr-)rrrTrfrJ)rr$r\rr|rDrrWs r#test_root_andersonz%TestNonlinOldTests.test_root_anderson#sD1aeeJ#%59+BDE  CEE"T)*r%ctttjddddid}tt j |j dktt j |jdky)NrrLrrrTrfrMrVrWs r#test_root_linearmixingz)TestNonlinOldTests.test_root_linearmixing)s[1aeeN#%,3S>;<  CEE"T)* CGG$t+,r%ctttjddddid}tt j |j dktt j |jdky)NrrrrrTrfrrVrWs r#test_root_excitingmixingz+TestNonlinOldTests.test_root_excitingmixing0s\1aee$4#%,3S>;<  CEE"T)* CGG$t+,r%ctttjddddid}tt j |j dktt j |jdky)NrrQrr rTrfrRrVrWs r#test_root_diagbroydenz(TestNonlinOldTests.test_root_diagbroyden7s[1aeeM#%,3Q<9:  CEE"T)* CGG$t+,r%N)rrrrrrrr6rOr3rXr[r]r_rarcr(r%r#r=r=sC * * '* * * - - + ---r%r=)0r numpy.testingrr functoolsrscipy.optimizerr|r scipy.sparsernumpyrr numpy.linalgr rrscipy.sparse.linalgr test_minpackrrrrrrrr}rZrtr$r\rsr[rhr*r0r9r<rCrOrQrrrr=r(r%r#rls\" 2" &* ,,!..#22))  + fooF4H4H J        & 3 3"("7"79  "   H R '-':':)/)>)>&,&8&8:  " L > "("7"7 & 3 3%113 "j# "("7"7 & 3 3%113 xPxPvIBIBXB8B8J_G_GDH-H-r%