K i=&ddlZddlmZmZddlmZddlmZddlm Z ddl m Z ddl m Z mZddlmZmZmZdd lmZdd lmZmZdd lmZdd lmZdd lmZddlmZm Z m!Z!m"Z"ddl#m$Z$m%Z%ddl&m'Z'm(Z(ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9ddl:m;Z;mZ>ddl?m@Z@mAZAddlBmCZCedZDedZEedZFdZGdZHdZIdZJdZKdZLdZMd-d ZNd!ZOd"ZPd#ZQd$ZRd%ZSd&ZTd'ZUd(ZVd)ZWd*ZXe;d+ZYeCd,ZZy).N)piRational)Pow)S)Symbol)Abs)explog)cossinsinc) MatrixSymbol)assumingQ) import_module)ccode) MatrixSolve)log2exp2expm1log1p) logaddexp logaddexp2)cosm1powm1)optimize cosm1_optlog2_optexp2_opt expm1_opt log1p_opt powm1_opt optims_c99create_expand_pow_optimization matinv_opt logaddexp_optlogaddexp2_opt optims_numpy optims_scipy sinc_optsFuncMinusOneOptim)XFAILskip)lambdify)compile_link_import_stringshas_c) may_xfailcythonnumpyscipycBtd}dtd|zdzztdz }t|tg}|dt d|zdzzk(sJ|j t|k(sJdtd|zdzzdtdzz }t|tg}|dt d|zdzzdz k(sJ|j t|k(sJt|tdz }t|tg}|t |k(sJ|j t|k(sJt|tdz t|dzz}t|tg}|t |tdt |dzzzk(sJ|j t|k(sJtd} t| tg} | | k(sJt|dztdz } t| tg} t | d k(sJ| j t| k(sJy) Nx z log2(x + 3))rr rrrrewritestr) r6expr1opt1expr2opt2expr3opt3expr4opt4expr5opt5expr6opt6s h/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/codegen/tests/test_rewriting.py test_log2_optrM ss A c!A#'lNCF #E EH: &D 1T!A#']? "" " <<  %% % c!A#'lNBs1vI &E EH: &D 1T!A#']?2% %% % <<  %% % F3q6ME EH: &D 47?? <<  %% % F3q6MC!H $E EH: &D 47SVD1I-- -- - <<  %% % GE EH: &D 5== AJs1v E EH: &D t9 %% % <<  %% %ctd}dd|zz}t|tg}|dt|zk(sJ|j t |k(sJdd|zz}|t|tgk(sJy)Nr6r<r:r8)rrrrr>r)r6r@rArBs rL test_exp2_optrP@sws A 1HE EH: &D 1tAw;   <<  %% % 1HE HUXJ/ // /rNctdtdz }t|tg}t |z dk(sJ|j t|k(sJdtzdz }t|tg}dt z|k(sJ|j t|k(sJdtzdz }t|tg}dt zdz |k(sJ|j t|k(sJt ttd}|t||gk(sJ|t||gk(sJ|t||gk(sJdtztzdz }t|tg}dt ztz|k(sJ|j t|k(sJdtdzzdz } t| tg} dt dzz| k(sJ| j t| k(sJdtzdztdzz dz} t| tg} | j| jksJfd } t| | | | z d ksJtd }dtzdz dt|z z ddt|z z z }t|tg}d t zt |z |k(sJ|j t|z jdk(sJdtzdzd z }t|tg}tdzt z}dt zt dzz}||z j tjdk(sJ|||fvsJ|j t|z jdk(sJt|}t|tg}t|}t|}|||fvsJ|j t|j tz jjsJy)Nr6r<rr8r9r:F opportunisticcD|jdjS)Nr8)subsevalf)er6s rLevztest_expm1_opt..evosvva|!!##rNgV瞯<y) rr rr rr>r+r count_opsabsfactorr is_zero)r@rArBrCrDrEexpm1_opt_non_opportunisticrFrGrHrIrJrKrXrYexpr7opt7expr8opt8tgt8atgt8bexpr9opt9tgt9atgt9br6s @rLtest_expm1_optrkKss A FQJE EI; 'D 8d?a   <<  %% % c!fHqLE EI; 'D U1X:   <<  %% % c!fHqLE EI; 'D U1X:>T !! ! <<  %% %"3Ce"T HU%@$AB BB B 8E$?#@A AA A 8E$?#@A AA A c!fHs1v  !E EI; 'D U1X:A $ && & <<  %% % c!A#hJNE EI; 'D U1Q3Z<4   <<  %% % s1vX\CFQJ '! +E EI; 'D >> u0 00 0$ r%y2d8# $u ,, ,s A s1vX\AAJ '!Qs1vX, 6E EI; 'D eAh;uQx 4 '' ' LL  % - - /1 44 4 s1vXMA E EI; 'D VaZq !E eAhJqs #E EM " "3 ' . . 0A 55 5 E5> !! ! LL  % - - /1 44 4 JE EI; 'D JE JE E5> !! ! LL  c 2 2 : : < D DD DrNcttdj\}}t|t|zdz }t |t g}|t |t |zk(sJyNx yr:)maprsplitr rr rr6rYr@rAs rLtest_expm1_two_exp_termsrrW vu{{} %DAq FSVOa E EI; 'D 58eAh& && &rNctd}t|dz }t|tg}t ||z dk(sJ|j t|k(sJdt|zdz }t|tg}dt |z|k(sJ|j t|k(sJdt|zdz }t|tg}dt |zdz |k(sJ|j t|k(sJt ttd}|t||gk(sJ|t||gk(sJ|t||gk(sJdt|zt|zdz }t|tg} dt |zt|z| k(sJ| j t|k(sJdtd|zzdz } t| tg} dt d|zz| k(sJ| j t| k(sJddt|zz } t| tg} d t |z| k(sJ| j t| k(sJy) Nr6r<rr8r9r:FrRrZ)rr rrrr>r+r )r6r@rArBrCrDrEcosm1_opt_non_opportunisticrFrGrHrIrJrKs rLtest_cosm1_optrvsHs A FQJE EI; 'D 8d?a   <<  %% % c!fHqLE EI; 'D U1X:   <<  %% % c!fHqLE EI; 'D U1X:>T !! ! <<  %% %"3Ce"T HU%@$AB BB B 8E$?#@A AA A 8E$?#@A AA A c!fHs1v  !E EI; 'D U1X:A $ && & <<  %% % c!A#hJNE EI; 'D U1Q3Z<4   <<  %% % #a&LE EI; 'D eAh;$   <<  %% %rNcttdj\}}t|t|zdz }t |t g}|t |t |zk(sJyrm)rorrpr rrrrqs rLtest_cosm1_two_cos_termsrxrsrNctd}t|t|zdz }t|tt g}|t |t|zk(sJy)Nr6r:)rr r rr rrr)r6r@rAs rLtest_expm1_cosm1_mixedrzsMs A FSVOa E EIy1 2D 58eAh& && &rNcL|j|j}tjtjj }t ||z ||zksJtt|j|fi|xsi}ttt|j} t || |z } | t ||zksJtt|j|fi|xsi} t | | |z } | t ||z|zkDsJy)zU poorness=1e10 signifies that `expr` loses precision of at least ten decimal digits. N)rUrVr3finfofloat64epsr]r.listkeystuplerofloatvalues) exproptval_subs approx_ref lambdify_kwpoornessnum_refr~f1 args_floatnum_err1f2num_err2s rL_check_num_lambdifyrsii!'')G ++emm $ ( (C w# $z#~ 55 5 $x}}' D1B DBs5(//"345J2z?Z/0H c'#+& && & $x}}' E+2C EB2z?Z/0H c'#+h./ // /rNc td}dt|z dz }t|tg}|t | t|z k(sJt r t |||tddzidddid t|z d z }t|t}|d t |zt|z k(sJt r t |||tddzid ddittd |zz tz }t|tg}|t t d |zztd |zz k(sJt r4t |||tddzd z itdtzddiyy) Nr6r< ig&i3modulesr4)rr:rZg&y3r8) rr rrrr4rrr)rr)r6r@rArBrCrDrEs rLtest_cosm1_apartrsRs A c!fHqLE EI; 'D E!H9SV# ## # E4!QrUCZ%iY`Mab c!fHqLE E< (D 2eAh;s1v% %% % E4!QrUCZ%iY`Mab s1Q3xK" E EI; 'D B3uQqSz>#ac(* ** * E4!QrUCZ\):E%(OZcelYmn rNcBttdx}\}}||zdz }t|tg}|t ||k(sJ|D]'}|j ||j |k(r'Jt rtttt jjjddddk\rg|tdj|ti}d}t||||dd id |t|td ji}d } t|||| dd id yyy)Nxyr<.r8)r<rrg?g<V=rr4lh])rrg|=ghRw=iʚ;)rorrr"rdiffr4rintversionrpras_integer_ratiorr) argsr6rYr@rAargsubs1_a ref1_f64_asubs1_b ref1_f64_bs rL test_powm1rs!fd##D41a qD1HE EI; 'D 5A;  1zz#$))C.0001 s3 5 5 ; ;C @! DEF*Th < < >?BG* E4*9V]J^iopb!X'?'?'ABC+ E4*9V]J^inoUurNctd}t|dz}t|tg}t ||z dk(sJ|j t|k(sJtd|zdz}t|tg}t |tdz|k(sJ|j t|z j dk(sJtd|zdz}t|tg}t d|z|z dk(sJ|j t|k(sJt|dz}t|tg}t|dk(sJy)Nr6r<rr8r:z log(x + 3))rr rr!rr>simplifyr?) r6r@rArBrCrDrErFrGs rLtest_log1p_optrs0s A AJE EI; 'D 8d?a   <<  %% % !aLE EI; 'D 8c!f  $$ $ LL  % / / 1Q 66 6 !aLE EI; 'D 1:  !! ! <<  %% % !HE EI; 'D t9 $$ $rNctd}d|zt|tdz zt|dzzt|zdz }t|tj }|t |t|zt|zt|zk(sJ|jtjtjt|k(sJt|tdz t|dzz}t|t}|t|t|zk(sJ|jt|k(sJt|tdz td|zdzz}t|t}|t|tdzt|zz }|dk(sJ|jt|z j dk(sJd|zdtd|zdzzd tdzz zd t|zzd z td|zdzz}t|tj } | t |dtd|zdzzd z zd t|zztdzt|zz } | dk(sJ| jtjtjt|z j dk(sJdtd|zzdz } t| t} | dtd|zzz } | dk(sJ| jt| k(sJtd|zdz }t|t}|td|zdz |fvsJtd|zdz}t|t}|tdt|zz }|dk(sJ|jt|z j dk(sJtd|zdz}t|t}||k(sJy) Nr6r:r<r=rr8r9r7r; ) rr r rr#rrrrrr>r)r6r@rArBrCrDrEdelta3rFrGdelta4rHrIdelta5rJrKrarbdelta7rcrds rLtest_optims_c99rss A qD3q6#a&= 3q1u: -A 6 :E E: & / / 1D 47T!W$uQx/%(: :: : <<  $ $S ) 1 1# 6% ?? ? F3q6MCAJ &E E: &D 47U1X% %% % <<  %% % F3q6MC1r N *E E: &D T!Ws2w&q1 2F Q;; LL  % / / 1Q 66 6 qD1S1q\>2c!f9- -3q6 9B >RTBY OE E: & / / 1D T!WqacAgr11BuQxK?#b'IERSHT UF Q;; LL  % %c * 2 23 7% ? I I Kq PP P c!A#hJNE E: &D AeAaCjL F Q;; <<  %% % !HqLE E: &D E!A#JNE* ** * !aLE E: &D SVeAh& 'F Q;; LL  % / / 1Q 66 6 !aLE E: &D 5==rNc@d}td}||dzdk(sJ||dz|dzzdk(sJ||dz|dzzdk(sJ|t|dzd k(sJ||d zd k(sJ||d zd k(sJ||dz dk(sJ||dz|dzz dk(sJtdd}|||z|dzz dk(sJtdd}|tt|dzdk(sJd}||dzt|dzzdk(sJy)Nc@tt|tdgS)Nr[rrr$r6s rLz5test_create_expand_pow_optimization..Cs53A678:rNr6r[zx*x*x*xr:z x*x + x*x*x*xr9zpow(x, 5) + x*x*x*xzpow(sin(x), 4)z 1.0/(x*x*x*x)z pow(x, -5)z -(x*x*x*x)z-(x*x) + x*x*x*xiTintegerzpow(x, i) - (x*x)rY)realz exp(y*y*y*y)c Ftt|tddgS)Nr[c|jSN) is_Function)bs rLrzGtest_create_expand_pow_optimization....Vs ammrN)base_reqrrs rLrz5test_create_expand_pow_optimization..Us'E(1'E +(-'./0rNr8z pow(x, 3) + sin(x)*sin(x)*sin(x))rr rr )ccr6rrYcc2s rL#test_create_expand_pow_optimizationrBse :Bs A ad8y  adQTk?o -- - adQTk?3 33 3 c!fai=, ,, , a"g;/ )) ) a"g;, && & q!te9 $$ $ adQTk?0 00 0sD!A adQTk?1 11 1sA c#ad)n  // / 0C q!tc!fai $F FF FrNc^tdd}td||}td|d}ttj|5t |dz|zt gt||k(sJt |dz|z|zt gt|||zk(sJ dddy#1swYyxYw)NnTrAr6r<)rrrrfullrankrr%r)rrr6s rL test_matsolverZssD!AS!QAS!QA !**Q- PB! j\2k!Q6GGGGB! a*6+a:Ka:OOOOPPPs AB##B,c,ttdj\}}tt |t |z}t |t g}t|||z dk(sJt|||z dk(sJ|jt|k(sJy)Nrnr) rorrpr r rr&rr>rqs rLtest_logaddexp_optrds vu{{} %DAq AQ E EM? +D Q?T !Q && & Q?T !Q && & <<  %% %rNc,ttdj\}}td|zd|zztdz }t |t g}t |||z dk(sJt |||z dk(sJ|jt|k(sJy)Nrnr:r)rorrpr rr'rr>rqs rLtest_logaddexp2_optrms vu{{} %DAq 1q!t SV #E EN+ ,D a d "a '' ' a d "a '' ' <<  %% %rNcd}td}|t||z t|td|zd|zz td|ztd|z|z dtd|zz|t|z|t|zitd}|t||z||zz t||z|t||z z|z t||z tt|t|z tt|tdt|zt|z dtdt|zzt||z t||z iy)Nc^|jD]\}}t|t|k(rJyr)itemsrr*dkvs rLcheckztest_sinc_opts..checkws0GGI /DAqAy)Q. .. /rNr6r:r8rY)rr r rr6rYs rLtest_sinc_optsrvs// s A  Aqa AaC!A#ac AaC 4!9 #a&3q6   s A  AaC!A#tAaCy #ac( 1 tAaCy CF CFtCF| Ac!fH c!fqaAh/ Aqs1vax  rNc @d}td}|td|zd|zz td|zzdz td|zt d|zzt |dzt dz t |dzdzzt |dzt|dzziy)Nc^|jD]\}}t|t|k(rJyrrrr(rs rLrz test_optims_numpy..check0GGI 2DAqA|,1 11 2rNr6r:r<r8)rr r r rr rr)rr6s rLtest_optims_numpyrs2 s A  AaC!A#QqS!A%tAaCy51:'= AaCQ#adQh-'q!ttAaCy)@ rNc d}ttdj\}}|t||zt ||zzt||zdzztd|z|zz t ||zt ||zzt||zzt|t |z|z dz t|t |ziy)Nc^|jD]\}}t|t|k(rJyrrrs rLrz%test_optims_numpy_TODO..checkrrNrnr<r:) rorrpr r rr rr rrs rLtest_optims_numpy_TODOrs2 vu{{} %DAq  AaCQqS#ac!e*$c!fQhqj14!9T!A#Y3FuQqSz3Q Ac!fHQJ!U1T!W9- rNcts tdts tdtd}ddt dz zddt dz zzd d t d z zzd d t dz zzt dz t z}dt |z|z }t ddz}|j||jd}tdt |z|z tg}d}dt|j|t|j|dz}d}tj5} td|fd|fg| ddi\} } t| j!d|z } t| j#d|z } d| cxkrdksJJd| cxkrdksJJ dddy#1swYyxYw) Nzcython not installed.zNo C compiler found.r6r::ur8ar9r['r7\riz #include double func_unchanged(double x) { return %(unchanged)s; } double func_rewritten(double x) { return %(rewritten)s; } ) unchanged rewrittenz #cython: language_level=3 cdef extern double func_unchanged(double) cdef extern double func_rewritten(double) def py_unchanged(x): return func_unchanged(x) def py_rewritten(x): return func_rewritten(x) zfunc.cz _func.pyxstdc99) build_dircompile_kwargsgdy=g<6S:g}:gҶOɃ;gؗҜ<)r2r-r0rrrr rUrrr rtempfileTemporaryDirectoryr/r] py_rewritten py_unchanged)r6 about_tworxvalrefrNUMBER_OF_DIGITSfunc_cfunc_pyxfoldermodinfo err_rewritten err_unchangeds rL"test_compiled_ccode_with_rewritingrs  $% 7 #$s ABqvIq2af9~-a!AbE'l:1r!C&y>I!B%OPRRI#a&9$I R5#:D ..D ! # #B 'C3q6I- {;I  )++&678ikk*:;<> >FH  $ $ &-&/ +x!8 9eU^ TC,,U3c9: C,,U3c9: },u,,,,,},u,,,,,---s rs + "$4=EE;)(,2==;2 -$K7 x gg&@0?ED'#&L'' 0o,p$%,+\G0P&&.    2- 2-rN