L i#`PdZddlZddlmZmZmZmZmZmZm Z m Z m Z m Z m Z ddlmZmZmZmZmZmZddlZddlmZddlmZmZmZGddZGd d ZGd d eZGd deZGddZ GddZ!GddZ"Gdde"Z#Gdde"Z$Gdde"Z%Gdde"Z&e#e$e%e&gZ'dZ(dZ)dZ*d Z+d!Z,d"Z-d#Z.d$Z/Gd%d&Z0Gd'd(e0Z1Gd)d*e0Z2Gd+d,e0Z3Gd-d.e0Z4Gd/d0e0Z5d1Z6d2Z7d3Z8d4Z9d5Z:y)6z" Tests for numerical integration. N) arangezerosarraydotsqrtcossineyepiexpallclose)assert_assert_array_almost_equalassert_allcloseassert_array_equal assert_equal assert_warns)raises)odeintode complex_odeceZdZdZdZy) TestOdeintc\tdjd}tjj|d\}}t j ||tfdj|dd\}}t j ||tdrtjj|jd\}}t j ||tfd j|fd dd \}}t j ||yy) Ng?T full_outputc(j||SNftyproblems j/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/integrate/tests/test_integrate.pyz(TestOdeint._do_problem.. s'))Aq/)rtfirstjac)Dfunrc(j||Srr r"s r&r'z(TestOdeint._do_problem..+sgii1or(c(j||Srr*r"s r&r'z(TestOdeint._do_problem..,s7;;q!3Dr()r+rr)) rstop_trr!z0rverifyhasattrr*)selfr%r#zinfodicts ` r& _do_problemzTestOdeint._do_problems 3 -WYY A4H 8q!$%97::q)-d< 8q!$% 7E " GJJ -13KAx GNN1a( )!!=wzz1&D-1$@KAx GNN1a( ) #r(cdtD]'}|}|jr|j|)yrPROBLEMScmplxr6r3 problem_clsr%s r& test_odeintzTestOdeint.test_odeint0s0# &K!mG}}   W %  &r(N)__name__ __module__ __qualname__r6r=r(r&rrs *0&r(rceZdZdZddZy) TestODEClassNcfd}d}tdrfd}i}j jj|d<j|d<|j||}|j|fj dz j dz |d||jjd |jj}t||jt|j|ft|jd kD|ftj!t#|gj|fy) Nc(j||Srr r#r4r%s r&r!z#TestODEClass._do_problem..f?s99Q? "r(r*c(j||Srr.rFs r&r*z%TestODEClass._do_problem..jacCs{{1a((r(ubandlband )atolrtolmethodr)r#r)r2rIrH ode_classset_integratorrKrLset_initial_valuer0 integrater/rr$r successfulget_return_coder1r) r3r% integratorrMr!r*integrator_paramsigr4s ` r&r6zTestODEClass._do_problem<s. # 7E " ) == $ (A)0 g &)0 g & ^^As #* /&||B&||B!' /.  / WZZ3/ LL (1bdd# '6!23""$q(7F*;<uaSz7>>:Wfr?r@rNr6rAr(r&rCrC8s IOr(rCcleZdZeZdZdZdZdZdZ e jjdZ dZy) TestOdectD]H}|}|jr|js|j|dd|j|ddJyNvoderWbdf)r9r:stiffr6r;s r& test_vodezTestOde.test_vode_sM# 5K!mG}}==  &':   Wfe 4  5r(ctD];}|}|js|j|dd|j|dd=y)NzvoderWr]r9r^r6r;s r& test_zvodezTestOde.test_zvodeisC# 6K!mG==  '7;   Wgu 5  6r(cftD](}|}|jr|j|d*yNlsodar8r;s r& test_lsodazTestOde.test_lsodaqs2# /K!mG}}   Wg .  /r(ctD]B}|}|jr|jr$t|dr1|j |dDyNr*dopri5r9r:r^r2r6r;s r& test_dopri5zTestOde.test_dopri5yI# 0K!mG}}}}w&   Wh / 0r(ctD]B}|}|jr|jr$t|dr1|j |dDyNr*dop853rkr;s r& test_dop853zTestOde.test_dop853rmr(cdD]}d}t|j|}|jddt|j|}|jdd|j|jdz|j|jdzt t |j|jdzy)N)r\rarfcyN?rAr#r$s r&r!z'TestOde.test_concurrent_fail..fsr(r皙?)rrOrPrQr# assert_raises RuntimeError)r3solr!rr2s r&test_concurrent_failzTestOde.test_concurrent_fails- @C A%%c*A  1 %Q&&s+B  A & KKc " LL $ , QSS3Y ? @r(cRd}tdD]}dD]}|dvr|dkDr t|j|}|jddt|j|}|jdd|j |j dz|j |j dz|j |j dzt |jdt |jdd D]}t|j|}|jddt|j|}|jdd|j |j dz|j |j dz|j |j dz|j |j dz|j |j dzt |jd t |jd y) NcyrtrArvs r&r!z%TestOde.test_concurrent_ok..fsr()r\rarfrjrp>r\rfrarrwg?rjrpg333333?)rangerrOrPrQr#rr$)r3num_parallel_threadsr!krzr{r|s r&test_concurrent_okzTestOde.test_concurrent_oks q +AE +449MPQ9QF))#.##Aq)V**3/$$Q* ACC#I& RTTCZ( RTTCZ(S)c* + , +F))#.##Aq)V**3/$$Q* ACC#I& ACC#I& RTTCZ( ACC#I& RTTCZ(S)c* +# +r(N)r>r?r@rrNr_rcrgrlrqpytestmark thread_unsafer}rrAr(r&rYrY[sEI56/ 0 0 [[@@ #+r(rYc(eZdZeZdZdZdZdZy)TestComplexOdectD]<}|}|js|j|dd*|j|dd>yr[rbr;s r&r_zTestComplexOde.test_vodesC# 9K!mG==  &':  &%8  9r(cLtD]}|}|j|dyre)r9r6r;s r&rgzTestComplexOde.test_lsodas*$ /K!mG   Wg . /r(ctD]5}|}|jrt|dr$|j|d7yrir9r^r2r6r;s r&rlzTestComplexOde.test_dopri5?# 0K!mG}}w&   Wh /  0r(ctD]5}|}|jrt|dr$|j|d7yrorr;s r&rqzTestComplexOde.test_dop853rr(N) r>r?r@rrNr_rgrlrqrAr(r&rrsI9/00r(rc0eZdZdZdZdZdZdZdZy) TestSoloutcF g g d}d}ddg} fd}d}t|j|}|j||j|||j |}t d|t d|t d|t d|y) Nr$@ru@cfj|j|jyrappendcopyr#r$tsyss r&soloutz+TestSolout._run_solout_test..solout IIaL IIaffh r(c*|d|dz|ddz gSNrrrArvs r&rhsz(TestSolout._run_solout_test..rhs#aD1Q4K!A$'* *r(r)rrO set_soloutrPrQrr r3rTt0tendy0rrrVretrrs @@r&_run_solout_testzTestSolout._run_solout_tests   3Z  +X $ $Z 0 f R$ll4 2a5"%2b63'RUBRVT"r(c4dD]}|j|yNrrr3rTs r& test_soloutzTestSolout.test_solout . .J  ! !* - .r(cF g g d}d}ddg} fd}d}t|j|}|j|||j||j |}t d|t d|t d|t d|y) Nrrrurcfj|j|jyrrrs r&rz9TestSolout._run_solout_after_initial_test..soloutrr(c*|d|dz|ddz gSrrArvs r&rz6TestSolout._run_solout_after_initial_test..rhsrr(rr)rrOrPrrQrrrs @@r&_run_solout_after_initial_testz)TestSolout._run_solout_after_initial_tests   3Z  +X $ $Z 0 R$ fll4 2a5"%2b63'RUBRVT"r(c4dD]}|j|yr)rrs r&test_solout_after_initialz$TestSolout.test_solout_after_initial's. .solout33 IIaL IIaffh 48|r(c*|d|dz|ddz gSrrArvs r&rz.TestSolout._run_solout_break_test..rhs9rr(rr)rrOrrPrQrrr r3rTrrrrrVrrrrs @@@r&_run_solout_break_testz!TestSolout._run_solout_break_test+s   3Z   +X $ $Z 0 f R$ll4 2a5"%2b63'RUB2c!"2 r(c4dD]}|j|yrrrs r&test_solout_breakzTestSolout.test_solout_breakF. 4J  ' ' 3 4r(N) r>r?r@rrrrrrrAr(r&rrs #0.#0<64r(rc$eZdZdZdZdZdZy)TestComplexSoloutcD g g d}d}dg} fd}d}t|j|}|j||j|||j |}t d|t d|t d|t d|y)Nr4@cfj|j|jyrrrs r&rz2TestComplexSolout._run_solout_test..soloutUrr(cd|dz dz z gSNrur?rArvs r&rz/TestComplexSolout._run_solout_test..rhsYTB'( (r(rr)rrOrrPrQrrrs @@r&rz"TestComplexSolout._run_solout_testMs   U  )  , ,Z 8 f R$ll4 2a5"%2b63'RUBRVT"r(c4dD]}|j|yrrrs r&rzTestComplexSolout.test_solouterr(ct g g d}ddg} fd}d}t|j|}|j||j|||j }t d|t d|t d|t ddz kDt dky)Nrrcxj|j|j|dz kDryyrrrs r&rz8TestComplexSolout._run_solout_break_test..soloutqrr(cd|dz dz z gSrrArvs r&rz5TestComplexSolout._run_solout_break_test..rhswrr(rrr)rrOrrPrQrrrrs @@@r&rz(TestComplexSolout._run_solout_break_testis   U   )  , ,Z 8 f R$ll4 2a5"%2b63'RUB2c!"2 r(c4dD]}|j|yrrrs r&rz#TestComplexSolout.test_solout_breakrr(N)r>r?r@rrrrrAr(r&rrKs#0.64r(rc0eZdZdZdZdZdZgZdZdZ dZ dZ y)ODEz ODE problem FrNgư>gh㈵>) r>r?r@__doc__r^r:r/r0rIrHrKrLrAr(r&rrs1 E E F B E E D Dr(rc>eZdZdZdZeddgeZdZdZ dZ dZ y) SimpleOscillatorz Free vibration of a simple oscillator:: m \ddot{u} + k u = 0, u(0) = u_0 \dot{u}(0) \dot{u}_0 Solution:: u(t) = u_0*cos(sqrt(k/m)*t)+\dot{u}_0*sin(sqrt(k/m)*t)/sqrt(k/m) gq= ףp?rurwg@c~tdt}d|d<|j |jz |d<t ||S)N)rrrurr)rr)rfloatrmr)r3r4r#tmps r&r!zSimpleOscillator.fs;FE"D VVGdff$D 3{r(ct|j|jz }|jdt ||zz|jdt ||zz|z z}t ||dddf|j|jS)NrrrKrL) rrrr0rr r rKrL)r3zsr#omegaus r&r1zSimpleOscillator.verifysrTVVdff_% GGAJs57| #dggajU1W&=e&C C2ad8$))$))DDr(N) r>r?r@rr/rrr0rrr!r1rAr(r&rrs3 F Sz5 !B A A Er(rcDeZdZdZdezZegdZdZdZ dZ dZ y) ComplexExpzThe equation :lm:`\dot u = i u`gGz?)ry@y@y@y@Tc d|zS)NrrAr3r4r#s r&r!z ComplexExp.fs !t r(cdtdzS)Nr)r rs r&r*zComplexExp.jacs#a&yr(c~|jtd|zz}t|||j|jS)Nrr)r0r r rKrLr3rr#rs r&r1zComplexExp.verifys1 GGc"Q$i 2DIIDII>>r(N) r>r?r@rr r/r r0r:r!r*r1rAr(r&rrs-* "WF ! "B E?r(rc*eZdZdZdZdgZdZdZdZy)Piz'Integrate 1/(t + 1j) from t=-10 to t=10rTc,td|dz dzz gS)NrurJrrrs r&r!zPi.fsb!b&2+&'((r(cdtjdz}t||dddf|j|jS)NyrJrr)nparctanr rKrLrs r&r1z Pi.verifys5 "))B- 2b!e9499499EEr(N) r>r?r@rr/r0r:r!r1rAr(r&rrs!2 F B E)Fr(rcBeZdZdZdZdZgdZdZdZgdZ dZ d Z d Z y ) CoupledDecayze 3 coupled decays suited for banded treatment (banded mode makes it necessary when N>>3) T?)g@g@g*@rr)g(\?gq= ףp?g(\?c|j}tj|d |dz|d |dz|d|dzz|d |dz|d|dzzgSr)lmbdrr)r3r4r#rs r&r!zCoupledDecay.fsuyyxx$q'!A$q'!A$a15q'!A$a1578 8r(cj}tjjjzdzdfdfd}|dd|d |dd|d|dd|d |dd|d|dd|d S)NrrForderc4|j|z|z |f<yr)rH)ricivaljr3s r&set_jzCoupledDecay.jac..set_js*-Adjj2o"B& 'r(rr)rrrrIrH)r3r4r#rrrs` @r&r*zCoupledDecay.jacsyy HHdjj4::-115S A . aT!WH aDG aT!WH aDG aT!WHr(c tj|j}|d|dz }|d|dz }|d|dz }tj|d |z}tj|d |z}tj|d |z} tj|j d|z|j d|z|j d|dz|z ||z zz|j d| z|j d|dz|z || z zz|d|dz|j dz|z d|z || z zd|z || z zz zzfj } t| ||j|jS)Nrrrr) rrrr vstackr0 transposer rKrL) r3rr#rd10d21d20e0e1e2rs r&r1zCoupledDecay.verifysxx "1gQ1gQ1gQ VVT!WHqL ! VVT!WHqL ! VVT!WHqL ! II GGAJO GGAJOdggaj472S8BGD D GGAJOdggaj472S8BGD D Gd1g  *S 0 WR 1s7b2g#6 6 8 89 : ;D)+ 2DIIDII>>r(N) r>r?r@rr^r/r0rIrHrr!r*r1rAr(r&rrs6 E F B E E D8 2?r(rc|d|d g}|SNrrrA)r#xdxdts r&r!r!s aD1Q4%=D Kr(c(tddgddgg}|S)Nrrur)r#r rs r&r*r*s# Szc{ A Hr(c(||dz| |dzg}|Sr rAr#r rr s r&f1r%s# !A$Jqt $D Kr(c*td|g| dgg}|SNrrr#r rrs r&jac1r*s% U|} A Hr(c(||dz| |dzg}|Sr rA)r#r omega1omega2r s r&f2r0s# 1Q4K&1 &D Kr(c*td|g| dgg}|Srr)r#r rrrs r&jac2r5s% V}~ A Hr(c4|d|dz|d |dzg}|S)NrrrArs r&fvr;s+ !HQqTME!H9QqT> *D Kr(c6td|dg|d dgg}|S)Nrrrrrs r&jacvr @s. U1Xq 3! "A Hr(cteZdZdZdZdZdZdZdZdZ dZ d Z e jjd Zy ) ODECheckParameterUsez=Call an ode-class solver with several cases of parameter use.Fct||}|jr+|j|jdd|j|S|j|jdd|S)Ng& .>gHz>)rKrL with_jacobianr)rsolver_uses_jacrO solver_name)r3r!r*solvers r& _get_solverz ODECheckParameterUse._get_solverOshQ     ! !$"2"2D040D0D " F   ! !$"2"2D ! I r(cddg}|j|d|jtt|jddgy)Nrurr)rPrQr rr$r3r(ics r& _check_solverz"ODECheckParameterUse._check_solver[s;3Z  S)!&((T3K8r(cZ|jtt}|j|yr)r)r!r*r-)r3r(s r&test_no_paramsz#ODECheckParameterUse.test_no_paramsas"!!!S) 6"r(c|jtt}d}|j||jr|j ||j |yrt)r)rr set_f_paramsr&set_jac_paramsr-r3r(rs r&test_one_scalar_paramz*ODECheckParameterUse.test_one_scalar_paramesL!!"d+E"     ! !% ( 6"r(c|jtt}d}d}|j|||jr|j |||j |yrt)r)rrr1r&r2r-)r3r(rrs r&test_two_scalar_paramsz+ODECheckParameterUse.test_two_scalar_paramsmsU!!"d+FF+     ! !&& 1 6"r(c|jtt}ddg}|j||jr|j ||j |yrt)r)rr r1r&r2r-r3s r&test_vector_paramz&ODECheckParameterUse.test_vector_paramvsP!!"d+c E"     ! !% ( 6"r(c|jtt}|j|jdddg}|j |dt t|jty)Nr)nstepsrur) r)r!r*rOr'rPr UserWarningrQr r+s r&test_warns_on_failurez*ODECheckParameterUse.test_warns_on_failure~sZ!!!S)d..q93Z  S)[&"2"2B7r(N)r>r?r@rr'r&r)r-r/r4r6r8rrrr<rAr(r&r"r"FsMG KO 9 #### [[88r(r"ceZdZdZdZy)TestDOPRI5CheckParameterUserjFNr>r?r@r'r&rAr(r&r>r> KOr(r>ceZdZdZdZy)TestDOP853CheckParameterUserpFNr?rAr(r&rBrBr@r(rBceZdZdZdZy)TestVODECheckParameterUser\TNr?rAr(r&rDrDs KOr(rDceZdZdZdZy)TestZVODECheckParameterUseraTNr?rAr(r&rFrF KOr(rFceZdZdZdZy)TestLSODACheckParameterUserfTNr?rAr(r&rIrIrGr(rIcvd}dg}td||d\}}t|tj|ggy)Nrrc| SrrA)r$r#s r&r'z*test_odeint_trivial_time..s1"r(Tr)rrrr)rr#r$infos r&test_odeint_trivial_timerMs; B A_b!>GAtq"((RD6*+r(cxddd}dfd}tgdgdgdgd g}tjd }tjgd }t|||fd d dd \}}t|||fd d dd|d  \}}t|||fd d dddd \} } t|||fd d dd|ddd  \} } t ||dt || ddt | | dt |d|dt | d| dtfd|||fd d ddfdd  \} }t || dd !y)"Nc$|j|Sr)rr$r#cs r&funcz)test_odeint_banded_jacobian..funcsuuQxr(c|SrrArPs r&r*z(test_odeint_banded_jacobian..jacsr(c:|jjdSNCrTrrPs r& jac_transposez2test_odeint_banded_jacobian..jac_transposesssxxcx""r(c Jtjtjdtj|dftj|tjtj|ddftjtj|dddff}|S)Nrrr)rrr_diag)r$r#rQr*s r& bjac_rowsz.test_odeint_banded_jacobian..bjac_rowssyiiq"''!Q-/0GGAJEE"''!R.!"34EE"''!R.!Q"679: r(cL|||jjdSrUrW)r$r#rQr^s r& bjac_colsz.test_odeint_banded_jacobian..bjac_colss&Aq!##((s(33r()i3{Gz?rr)rwgg{Gz?r)gMbP?ragra)rrrwr)rrrJdTgvIh%<=gdy=i')argsrrKrLmxstepr+)rdrrKrLrer+ col_derivrr)rdrrKrLrer+mlmu) rdrrKrLrer+rgrhrfz sol1 != sol2)err_msg-q=z sol1 != sol3)rKriz sol3 != sol4njec|||SrrA)r#r$rQrRs r&r'z-test_odeint_banded_jacobian..sT!Q]r(c|||SrrA)r#r$rQr*s r&r'z-test_odeint_banded_jacobian..s#aA,r()rdrrKrLrer+r)zsol1 != sol1ty)rLri)rronesrrr)rYr`rQrr#sol1info1sol2info2sol3info3sol4info4sol1tyinfo1tyr^rRr*s @@@r&test_odeint_banded_jacobianrys#4 &&'&( )A B !Ar1A4T#%!#KD% r1A4T#%+t=KD% r1A4T#%'A!5KD% r1A4T#%'A!tEKD%D$7D$UNCD$7uU|U5\2uU|U5\2:B)-E$)">tMOFGD&u6FGr(c8d}d}d}d}d}d}d}ttt|dd d gttt|dd d gttt|dd d g| ttt|dd d g| ttt|ddgd d g| y) Nc d|zSNrAr r#s r&sys1dz!test_odeint_errors..sys1d Av r(c ddz SNrurrAr~s r&bad1z test_odeint_errors..bad1 1u r(cyNfoorAr~s r&bad2z test_odeint_errors..bad2sr(c ddz SrrAr~s r&bad_jac1z$test_odeint_errors..bad_jac1rr(c dggSrrAr~s r&bad_jac2z$test_odeint_errors..bad_jac2s yr(c"d|dzd|dzgS)Nr}r皙rrAr~s r&sys2dz!test_odeint_errors..sys2dsQqT 4!9%%r(cddz dgddggS)NrurrrAr~s r& sys2d_bad_jacz)test_odeint_errors..sys2d_bad_jacsQ QI&&r(rurrr+)rxZeroDivisionErrorr ValueError)rrrrrrrs r&test_odeint_errorsrs&'#VT3A?*fdC!Q8#VUC!QhO*feS1a&xH#VUS#JA$&r(cd}d}d}ddgddgg}ttt||ddgddgddgg}ttt|dg|ttt|d ddgttt|d d gddg| y) Nc ddgS)NrrrAr~s r&badrhsz&test_odeint_bad_shapes..badrhss 2wr(c d|zSr|rAr~s r&sys1z$test_odeint_bad_shapes..sys1rr(c gdgS)N)rrrrAr~s r&badjacz&test_odeint_bad_shapes..badjacs {r(rrrrrrJr)rxrrry)rrrbad_y0bad_ts r&test_odeint_bad_shapesrs!fq!f F*fdFQF;VaV E*fdTFE:,QF;,r2hAVLr(cd}tjd}t|dg|}t|tjt |dfdtj dz}dgdz|d|zd|zd |zgz}t|ddg|d d }tjdd ggdzd dgdd gdd gddggz}t||t|dgg}t|tjgtjjdttt|dggdttt|gdgdy)zRegression test for gh-8217.c d|zS)NgпrAr~s r&rRz$test_repeated_t_values..func1s Qwr(rJrurrbrr rrj)rLrKrrg?g?)dtyper)rrrr)rrr)rrr[rN) rrrrrnlenlogrrfloat64reshaperxr)rRr#rztau expected_sols r&test_repeated_t_valuesr.s3  A tQ CsBGGSVQK01 BFF1I+C AaeQsUAcE**A 1vqu5 9C88c3ZLN!3Z"C["C[#T],,-L C& tR CsBHHRrzz:BB6JK*fdRD.A*fdI~Fr();rnumpyrrrrrrrr r r r r numpy.testingrrrrrrrrrxscipy.integraterrrrrCrYrrrrrrrrr9r!r*rrrrrr r"r>rBrDrFrIrMryrrrrAr(r&rskEE*44 & &F O OFj+lj+Z&0\&0RW4W4t;4;4F   EsE2??" F F<?3<?~ j"l ;         ?8?8D"6 "6  4 !5 !5 ,FHR&@M6Gr(