K i1dZddlmZddlmZddlmZmZmZddl m Z ddl m Z ddl mZidd d fgd d d fgdddfgdddfgdddfgdddfgdddfgdddfgd d!d"fgd#d$d%fgd&d'd(fgd)d*d+fgd,d-d.fgd/d0d1fgd2d3d4fgd5d6d7fgd8d9d:fgid;d<d=fgd>d?d@fgdAdBdCfgdDdEdFfgdGdHdIfgdJdKdLfgdMdNdOfgdPdQdRfgdSdTdUfgdVdWdXfgdYdZd[fgd\d]d\fgd^d_d^fgd`dadbfgdcdddbfgdedfdgfgdhdidjfgidkdldmfgdndodpfgdqdrdmfgdsdtdufgdvdwdxfgdydzd{fgd|d}d~fgdddfgdddfgdddfgdddfgdddfgdddfgdddfgdddfgdddfgdddfgidddfgdddfgdddfgdddfgdddfgdddfgdddfgdddfgdddfgdddfgdddfgdddfgdddfgddÄdfgddƄdfgddɄdfgdd̄dfgidd΄dfgddфdfgddԄdfgddׄdfgddڄdfgdd݄dfgdddfgdddfgdddfgdddfgdddfgdddfgdddfgdddfgdddfgdddfgdddfgidddfgdddfgdddfgdd d fgd d d fgdddfgdddfgdddfgdddfgdddfgdddfgd d!d"fgd#d$d%fgd&d'd(fgd)d*d)fgd+d,d-fgd.d/d.fgd0d1d2fgiZGd3d4e Zd5Zy6(7z Mathematica code printer ) annotations)Any)BasicExprFloat)default_sort_key) CodePrinter) precedenceexpcyNTxs `/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/printing/mathematica.pyrExplogcyr rrs rrrrrLogsincyr rrs rrrrrSincoscyr rrs rrrrrCostancyr rrs rrrrrTancotcyr rrs rrrrrCotseccyr rrs rrrrrSeccsccyr rrs rrrrrCscasincyr rrs rrrrrArcSinacoscyr rrs rrrrrArcCosatancyr rrs rrrrrArcTanacotcyr rrs rrrrrArcCotaseccyr rrs rrrrrArcSecacsccyr rrs rrrrrArcCscsinhcyr rrs rrrrrSinhcoshcyr rrs rrrrrCoshtanhcyr rrs rrr rrTanhcothcyr rrs rrr!rrCothsechcyr rrs rrr"rrSechcschcyr rrs rrr#rrCschasinhcyr rrs rrr$rrArcSinhacoshcyr rrs rrr%rrArcCoshatanhcyr rrs rrr&rrArcTanhacothcyr rrs rrr'rrArcCothasechcyr rrs rrr(rrArcSechacschcyr rrs rrr)rrArcCschsinccyr rrs rrr*rrSinc conjugatecyr rrs rrr+rr ConjugateMaxcyr rrs rrr,rrMincyr rrs rrr-rrerfcyr rrs rrr.rrErferf2cyr rrs rrr/rrerfccyr rrs rrr0rrErfcerficyr rrs rrr1rrErfierfinvcyr rrs rrr2rr InverseErferfcinvcyr rrs rrr3rr InverseErfcerf2invcyr rrs rrr4rrexpintcyr rrs rrr5rr ExpIntegralEEicyr rrs rrr6rr ExpIntegralEifresnelccyr rrs rrr7rrFresnelCfresnelscyr rrs rrr8rrFresnelSgammacyr rrs rrr9rrGamma uppergammacyr rrs rrr:rr polygammacyr rrs rrr;rr PolyGammaloggammacyr rrs rrr<rrLogGammabetacyr rrs rrr=rrBetaCicyr rrs rrr>rr CosIntegralSicyr rrs rrr?rr SinIntegralChicyr rrs rrr@rr CoshIntegralShicyr rrs rrrArr SinhIntegrallicyr rrs rrrBrr LogIntegral factorialcyr rrs rrrCrr Factorial factorial2cyr rrs rrrDrr Factorial2 subfactorialcyr rrs rrrErr Subfactorialcatalancyr rrs rrrFrr CatalanNumberharmoniccyr rrs rrrGrrHarmonicNumberlucascyr rrs rrrHrrLucasLRisingFactorialcyr rrs rrrIrr PochhammerFallingFactorialcyr rrs rrrJrrFactorialPowerlaguerrecyr rrs rrrKrr LaguerreLassoc_laguerrecyr rrs rrrLrrhermitecyr rrs rrrMrrHermiteHjacobicyr rrs rrrNrrJacobiP gegenbauercyr rrs rrrOrr GegenbauerC chebyshevtcyr rrs rrrPrr ChebyshevT chebyshevucyr rrs rrrQrr ChebyshevUlegendrecyr rrs rrrRrr LegendrePassoc_legendrecyr rrs rrrSrrmathieuccyr rrs rrrTrrMathieuCmathieuscyr rrs rrrUrrMathieuS mathieucprimecyr rrs rrrVrr MathieuCPrime mathieusprimecyr rrs rrrWrr MathieuSPrime stieltjescyr rrs rrrXrrStieltjesGamma elliptic_ecyr rrs rrrYrr EllipticE elliptic_fcyr rrs rrrZrr elliptic_kcyr rrs rrr[rr EllipticK elliptic_picyr rrs rrr\rr EllipticPizetacyr rrs rrr]rrZeta dirichlet_etacyr rrs rrr^rr DirichletEta riemann_xicyr rrs rrr_rr RiemannXibesselicyr rrs rrr`rrBesselIbesseljcyr rrs rrrarrBesselJbesselkcyr rrs rrrbrrBesselKbesselycyr rrs rrrcrrBesselYhankel1cyr rrs rrrdrrHankelH1hankel2cyr rrs rrrerrHankelH2airyaicyr rrs rrrfrrAiryAiairybicyr rrs rrrgrrAiryBi airyaiprimecyr rrs rrrhrr AiryAiPrime airybiprimecyr rrs rrrirr AiryBiPrimepolylogcyr rrs rrrjrrPolyLoglerchphicyr rrs rrrkrrLerchPhigcdcyr rrs rrrlrrGCDlcmcyr rrs rrrmrrLCMjncyr rrs rrrnrrSphericalBesselJyncyr rrs rrrorrSphericalBesselYhypercyr rrs rrrprrHypergeometricPFQmeijergcyr rrs rrrqrrMeijerGappellf1cyr rrs rrrrrrAppellF1 DiracDeltacyr rrs rrrsrr Heavisidecyr rrs rrrtrrHeavisideThetaKroneckerDeltacyr rrs rrrurrsqrtcyr rrs rrrvrrSqrtc\eZdZUdZdZdZeejfididZde d<e Z de d <e Z d e d <ifd Z d ZdZfdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ d Z!e!Z"e!Z#d!Z$d"Z%d#Z&d$Z'd%Z(e(Z)d&Z*d'Z+d(Z,d)Z-d*Z.d+Z/xZ0S), MCodePrinterz]A printer to convert Python expressions to strings of the Wolfram's Mathematica code _mcodezWolfram Language) precisionuser_functionszdict[str, Any]_default_settingszset[tuple[Expr, Float]]_number_symbolsz set[Basic]_not_supportedc2tj||tt|_|j dij }|j D]\}}t|trd|fg||<!|jj|y)z+Register function mappings supplied by userrCcyr rrs rrz'MCodePrinter.__init__..rrN) r __init__dictknown_functionsgetcopyitems isinstancelistupdate)selfsettings userfuncskvs rrIzMCodePrinter.__init__sT8,#O4LL!126;;= OO% 6DAqa&!0! 45 !  6 ##I.rc|SNr)rRliness r _format_codezMCodePrinter._format_codes rct|}|j|j|d|j|j|S)N^)r parenthesizebaser )rRexprPRECs r _print_PowzMCodePrinter._print_Pows>$++DIIt<++DHHd;= =rct||j\}}t |j|}|r#|dz }|dj fd|Dz }|S)N*z**c3BK|]}j|ywrX)r]).0ar`rRs r z*MCodePrinter._print_Mul..sDAT..q$7Ds)r args_cncsuper _print_Mulfuncjoin)rRr_cncresr` __class__s` @rrjzMCodePrinter._print_Muls_$ 2g A/ 3JC 499DDD DC rc|j|j}|j|j}|j}dj |||S)Nz{} {} {})_printlhsrhsrel_opformat)rRr_lhs_coderhs_codeops r_print_RelationalzMCodePrinter._print_RelationalsD;;txx(;;txx( [[  2x88rcy)N0rrRr_s r _print_ZerozMCodePrinter._print_Zerorcy)N1rr}s r _print_OnezMCodePrinter._print_Onerrcy)Nz-1rr}s r_print_NegativeOnezMCodePrinter._print_NegativeOnercy)Nz1/2rr}s r _print_HalfzMCodePrinter._print_Halfsrcy)NIrr}s r_print_ImaginaryUnitz!MCodePrinter._print_ImaginaryUnitrrcy)NInfinityrr}s r_print_InfinityzMCodePrinter._print_Infinitysrcy)Nz -Infinityrr}s r_print_NegativeInfinityz$MCodePrinter._print_NegativeInfinitysrcy)NComplexInfinityrr}s r_print_ComplexInfinityz#MCodePrinter._print_ComplexInfinitys rcy)N Indeterminaterr}s r _print_NaNzMCodePrinter._print_NaNsrcy)NErr}s r _print_Exp1zMCodePrinter._print_Exp1rrcy)NPirr}s r _print_PizMCodePrinter._print_Pirrcy)N GoldenRatiorr}s r_print_GoldenRatiozMCodePrinter._print_GoldenRatiosrc`|jd}t|}|j||S)NT)rk)expandr r])rRr_expandedr`s r_print_TribonacciConstantz&MCodePrinter._print_TribonacciConstants/;;D;)$  400rcy)N EulerGammarr}s r_print_EulerGammazMCodePrinter._print_EulerGammasrcy)NCatalanrr}s r_print_CatalanzMCodePrinter._print_CatalansrcDddjfd|DzdzS)N{, c3@K|]}j|ywrXdoprintrerfrRs rrgz+MCodePrinter._print_list..s=1t||A=}rlr}s` r _print_listzMCodePrinter._print_lists"TYY====CCrc@|j|jSrXrtolistr}s r_print_ImmutableDenseMatrixz(MCodePrinter._print_ImmutableDenseMatrix||DKKM**rcbfdfd}fd}dj||S)Ncdjj|ddz|ddzfj|S)N{} -> {}rrvrposvalrRs r print_rulez=MCodePrinter._print_ImmutableSparseMatrix..print_rulesD$$ LL#a&(CF1H- . S0AC Crctjjt}ddj fd|DzdzS)N)keyrrc36K|]\}}||ywrXr)rerUrVrs rrgzPMCodePrinter._print_ImmutableSparseMatrix..print_data..s=tq!*Q*=sr)sortedtodokrNrrl)rNr_rs r print_dataz=MCodePrinter._print_ImmutableSparseMatrix..print_datasF4::<--/5EFE =u==> rc:jjSrXrshaper_rRsr print_dimsz=MCodePrinter._print_ImmutableSparseMatrix..print_dimss<< + +rSparseArray[{}, {}]rv)rRr_rrrs`` @r_print_ImmutableSparseMatrixz)MCodePrinter._print_ImmutableSparseMatrixs, C   ,%++JL*,GGrc@|j|jSrXrr}s r_print_ImmutableDenseNDimArrayz+MCodePrinter._print_ImmutableDenseNDimArrayrrcvddfdfd}fd}dj||S)Nc>ddjd|DzdzS)Nrrc3 K|]}|ywrXr)rerfs rrgzZMCodePrinter._print_ImmutableSparseNDimArray..print_string_list..s":1":s rr) string_lists rprint_string_listzGMCodePrinter._print_ImmutableSparseNDimArray..print_string_lists!":k":::S@ @rc&td|DS)zHelper function to change Python style indexing to Pathematica indexing. Python indexing (0, 1 ... n-1) -> Mathematica indexing (1, 2 ... n) c3&K|] }|dz yw)rNr)reis rrgz]MCodePrinter._print_ImmutableSparseNDimArray..to_mathematica_index..s-1Q-s)tuple)argss rto_mathematica_indexzJMCodePrinter._print_ImmutableSparseNDimArray..to_mathematica_indexs--- -rcddjj|j|S)z.Helper function to print a rule of Mathematicarrrs rrz@MCodePrinter._print_ImmutableSparseNDimArray..print_rules($$T\\#%6 S8IJ Jrc tjjDcgc] \}}j||"c}}Scc}}w)a/Helper function to print data part of Mathematica sparse array. It uses the fourth notation ``SparseArray[data,{d1,d2,...}]`` from https://reference.wolfram.com/language/ref/SparseArray.html ``data`` must be formatted with rule. )r _sparse_arrayrN_get_tuple_index)rvaluer_rrrs rrz@MCodePrinter._print_ImmutableSparseNDimArray..print_data sg%#)););)A)A)C"DFC(4+@+@+EGF Fs%A c:jjS)aHelper function to print dimensions part of Mathematica sparse array. It uses the fourth notation ``SparseArray[data,{d1,d2,...}]`` from https://reference.wolfram.com/language/ref/SparseArray.html rrsrrz@MCodePrinter._print_ImmutableSparseNDimArray..print_dimss<< + +rrr)rRr_rrrrrs`` @@@r_print_ImmutableSparseNDimArrayz,MCodePrinter._print_ImmutableSparseNDimArrays7 A . K " ,%++JL*,GGrc|jjjvraj|jj}|D]8\}}||js|dj |jddcSn|jjj vrkj |jj\}}j |r4tfd|Dr j|j|S|jjdj |jdzzS)N[r]c3@K|]}j|ywrX) _can_print)refrRs rrgz/MCodePrinter._print_Function..2s0Y1C0Yrz[%s]) rk__name__rKr stringify_rewriteable_functionsrallrrrewrite)rRr_ cond_mfunccondmfunctarget_f required_fss` r_print_FunctionzMCodePrinter._print_Function)s 99  !5!5 5--dii.@.@AJ) O e#',dnnTYY.MNN OYY  4#>#> >$($?$? @R@R$S !Hkx(S0Y[0Y-Y{{4<<#9::yy!!FT^^DIIt-L$LLLrc t|jdk(r-dj|j|jdSdj|j|jd|j|jdS)NrzProductLog[{}]rzProductLog[{}, {}])lenrrvrrr}s r_print_LambertWzMCodePrinter._print_LambertW8sp tyy>Q #**4;;tyy|+DE E#** KK ! %t{{499Q<'@B Brcdj|j|jd|j|jdS)NzArcTan[{}, {}]rr)rvrrrr}s r _print_atan2zMCodePrinter._print_atan2>s>&& KK ! %t{{499Q<'@B Brct|jdk(r1|jddds|jd|jdg}n |j}ddj fd|DzdzS)NrrzHold[Integrate[rc3@K|]}j|ywrXrrs rrgz/MCodePrinter._print_Integral..Gs,KT\\!_,Kr]])r variableslimitsrrl)rRr_rs` r_print_IntegralzMCodePrinter._print_IntegralBsh t~~ ! #DKKN12,>IIaL$.."34D99D 499,Kd,K#KKdRRrcXddjfd|jDzdzS)Nz Hold[Sum[rc3@K|]}j|ywrXrrs rrgz*MCodePrinter._print_Sum..Js&J1t||A&Jrr)rlrr}s` r _print_SumzMCodePrinter._print_SumIs&TYY&J &JJJTQQrc|j}|jDcgc]}|ddk(r|dn|}}ddjfd|g|zDzdzScc}w)NrrzHold[D[rc3@K|]}j|ywrXrrs rrgz1MCodePrinter._print_Derivative..Os$NT\\!_$Nrr)r_variable_countrl)rRr_dexprrdvarss` r_print_DerivativezMCodePrinter._print_DerivativeLsd 373F3FGa11)GG499$Nugo$NNNQUUUHsAc$dj|S)Nz(* {} *)r)rRtexts r _get_commentzMCodePrinter._get_commentRs  &&r)1r __module__ __qualname____doc__ printmethodlanguagerJr rD__annotations__setrErFrIrZrarjrzr~rrrrrrrrrrrrrrr _print_tuple _print_Tuplerrrrr_print_MinMaxBaserrrrrr  __classcell__)rps@rr?r?zsK!H(,[-J-J)O)~ 03uO,4!$NJ& "/= 9 ! 1 DLL+H"+,H\ M(B BSRV 'rr?c 6t|j|S)aConverts an expr to a string of the Wolfram Mathematica code Examples ======== >>> from sympy import mathematica_code as mcode, symbols, sin >>> x = symbols('x') >>> mcode(sin(x).series(x).removeO()) '(1/120)*x^5 - 1/6*x^3 + x' )r?r)r_rSs rmathematica_coderVs  ! ) )$ //rN)r __future__rtypingr sympy.corerrrsympy.core.sortingrsympy.printing.codeprinterr sympy.printing.precedencer rKr?rrrrrsE #))/20h ^U # $h ^U # $h ^U # $h ^U # $ h  ^U # $ h  ^U # $ h ^U # $h ^U # $h nh ' (h nh ' (h nh ' (h nh ' (h nh ' (h nh ' (h nf % &h  nf % &!h" nf % &#h$ nf % &%h& nf % &'h( nf % &)h* ~y) *+h, ~y) *-h. ~y) */h0 ~y) *1h2 ~y) *3h4 ~y) *5h6 nf % &7h8>;/09h: _e $ %;h< _e $ %=h> ^U # $?h@ ou % &AhB nf % &ChD nf % &EhF  -.GhH/0IhJ,/0KhL 01MhN NO , -OhP.*-.QhR.*-.ShT ~w' (UhVOW-.WhX?K01YhZ.*-.[h\ ov & ']h^ NM * +_h` NM * +ahb ^^ , -chd ^^ , -ehf NM * +ghh>;/0ihjNL12khlnn56mhn12ohp/#345qhr ~x( )sht,78uhv/+;<=whx/;/0yhz56{h|*-.}h~ +,h@O]34AhBO\23ChDO\23EhF/;/0GhH56IhJ/:./KhL/:./MhN89OhP89QhR>#345ShTO[12UhVO[12WhXNK01YhZ_l34[h\ ov & ']h^~~67_h`NK01ahb),-chd),-ehf),-ghh),-ihj*-.khl*-.mhn )*ohp )*qhr^]34sht^]34uhv),-whx/:./yhz _e $ %{h| _e $ %}h~ O/ 0 1h@ O/ 0 1AhB  34 5ChD),-EhF/:./GhHNL12IhJ>#345KhL)9:;MhN nf % &OhVY';Y'x 0r