
    Xh6                        d dl mZmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZ d dl mZmZmZmZmZmZ d dlmZmZmZmZmZmZmZ d dlmZ d dl m!Z! d dl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d dlm6Z6 d d	l7m8Z8  ed
          \  Z9Z:Z;d Z<d Z=d Z>d Z?d Z@d ZAd ZBd ZCd ZDd ZEd ZFd ZGd ZHd ZId ZJd ZKe6d             ZLd ZMd ZNd ZOd ZPd  ZQd! ZRd" ZSd# ZTd$ ZUd% ZVd& ZWd' ZXd( ZYd) ZZd* Z[d+ Z\d, Z]d-S ).    )SpioosymbolsFunctionRationalIntegerTupleSymbolEqNeLeLtGtGe)
EulerGammaGoldenRatioCatalanLambdaMulPow)	Piecewisesqrtceilingexpsincossinc)raises)implemented_function)eyeMatrixMatrixSymbolIdentityHadamardProductSparseMatrix)jnynbesseljbesselybesselibesselkhankel1hankel2airyaiairybiairyaiprimeairybiprime)XFAIL
julia_codezx,y,zc                      t          t          d                    dk    sJ t          t          d                    dk    sJ d S )NC   67z-1)r5   r	        q/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/sympy/printing/tests/test_julia.pytest_Integerr=      sF    gbkk""d****gbkk""d******r;   c                     t          t          dd                    dk    sJ t          t          dd                    dk    sJ t          t          dd                    dk    sJ t          t          d	d                    dk    sJ t          t          t          dd          z             d
k    sJ t          t          dd          t          z            dk    sJ d S )N      z3 // 7   	   2iz-3 // 7z
x + 3 // 7z(3 // 7) * x)r5   r   xr:   r;   r<   test_RationalrF      s    hq!nn%%1111hr1oo&&#----hq"oo&&)3333hr2&&''83333a(1a..())\9999hq!nnQ&''>999999r;   c                  "   t          t          t          t                              dk    sJ t          t	          t          t                              dk    sJ t          t          t          t                              dk    sJ t          t          t          t                              dk    sJ t          t          t          t                              dk    sJ t          t          t          t                              dk    sJ d S )Nzx == yzx != yzx <= yzx < yzx > yzx >= y)	r5   r   rE   yr   r   r   r   r   r:   r;   r<   test_RelationalrI   !   s    bAhh8++++bAhh8++++bAhh8++++bAhh7****bAhh7****bAhh8++++++r;   c                     t          t          t                    t          t                    z            dk    sJ t          t	          t                              dk    sJ t          t          t                              dk    sJ d S )Nzsin(x) .^ cos(x)zabs(x)zceil(x))r5   r   rE   r   absr   r:   r;   r<   test_FunctionrL   *   sq    c!ffA&''+=====c!ff))))gajj!!Y......r;   c                     t          t          dz            dk    sJ t          t          t          dz  z            dk    sJ t          t          t          dd          z            dk    sJ t	          dt          t          dt          z                      } t          d | t                    dz  t          t          t          z  z
  z  z  t          dz  t          z   z            d	k    sJ t          t          d
t          t          t          t          t          d          dd          d                    dk    sJ d S )Nr?   zx .^ 3zx .^ (y .^ 3)   zx .^ (2 // 3)g   g      @z.(3.5 * 2 * x) .^ (-x + y .^ x) ./ (x .^ 2 + y)F)evaluater9   z-2 * x ./ (y .* y))r5   rE   rH   r   r    r   r   r   )rO   s    r<   test_PowrS   0   sA   adx''''a!Q$i  O3333a!Q'((O;;;;S&AaC..11Aa1cQAX..1q9::89 9 9 9 c"aS1e%<%<%<b5!Q!Q!Q9>@ @ @ A ADXY Y Y Y Y Yr;   c                     t          t          t          z            dk    sJ t          t          t          z             dk    sJ t          t          t          z
            dk    sJ t          t                     dk    sJ d S )Nx .* yzx + yzx - yz-x)r5   rE   rH   r:   r;   r<   test_basic_opsrV   <   sv    ac??h&&&&a!e''''a!e''''qb>>T!!!!!!r;   c                  X   t          dt          z            dk    sJ t          t          dz            t          t          dz            cxk    rdk    sn J t          dt          t                    z            dk    sJ t          t          t          j         z            t          t          dz            cxk    rdk    sn J t          t          t                              dk    sJ t          t          t          j        z            t          t          dz            cxk    rdk    sn J t          dt
          z            d	k    sJ t          t
          dz            t          t
          dz            cxk    rd	k    sn J t          t
          dz            d
k    sJ d S )NrP   z1 ./ xr9   g      z1 ./ sqrt(x)g      zsqrt(x)g      ?z1 / piz1 / sqrt(pi))r5   rE   r   r   Halfr   r:   r;   r<   test_1_over_x_and_sqrtrY   C   s    ac??h&&&&ae
1d7 3 3????x??????aQi  N2222a!&j!!Z4%8%8JJJJNJJJJJJd1gg)++++ai  Jq#v$6$6CCCC)CCCCCCadx''''b"fBH!5!5AAAAAAAAAAb$h>111111r;   c                  d   t          dt          z            dk    sJ t          t          t          z            dk    sJ t          dt          z            dk    sJ t          t          t          z            dk    sJ t          t          dz            dk    sJ t          t          t          z            dk    sJ t          t          t          z            dk    sJ t          dt          z  t          z            d	k    sJ t          dt          z  t          z  t          z            d
k    sJ t          t          t          z            dk    sJ t          dt          z  t          z            dk    sJ t          t          t          z  t          z            dk    sJ t          t          t          z  t          z            dk    sJ t          dt          z  t          z            dk    sJ t          dt          z  t          z  t          z  t          z            dk    sJ t          dt          z  t          z            dk    sJ t          t          d          dz            dk    sJ t          t          d          dz  t          z            dk    sJ t          t          t          z  t          z            dk    sJ t          t          t          z   t          z            dk    sJ t          t          t          z   t          t          z   z            dk    sJ t          t          t          z   t          z            dk    sJ t          t          dz  t          z            dk    sJ t          t          d          dz  t          z  t          z  t          z            dk    sJ d S )Nr?   z3 * xzpi * xz3 ./ xzpi ./ xzx / 3zx / pirU   z
3 * x .* yz3 * pi * x .* yzx ./ yz
3 * x ./ yzx .* y ./ zzx .* z ./ yrP   z1 ./ (x .* y)rN   z2 * pi * x ./ (y .* z)z3 * pi ./ x   z3 // 5z(3 // 5) * xzx ./ (y .* z)z(x + y) ./ zz(x + y) ./ (x + z)z(x + y) / eulergammazx / (3 * pi)z(3 // 5) * x .* y / pi)r5   rE   r   rH   zr   r   r:   r;   r<   test_mix_number_mult_symbolsr]   Q   s"   ac??g%%%%bdx''''ac??h&&&&bdy((((ac??g%%%%adx''''ac??h&&&&ac!e,,,,ad1fQh#44444ac??h&&&&ac!e,,,,ac!e----ac!e----ac!e////ad1fQhqj!!%=====ad1f....add1f))))add1fQh>1111ac!e////qsAg.0000qsQqSk""&:::::qsJ&''+AAAAAac"f////add1fQhqjm$$(@@@@@@@r;   c                     t          t          dz            dk    sJ t          t          dz            dk    sJ t          t          t          dz  z            dk    sJ t          t          t          z            dk    sJ t          t          t          t          z  z            dk    sJ t          t          t          z  t          z            dk    sJ d S )	Nr?   zpi ^ 3rN   zx .^ 2zx .^ (pi ^ 3)zx .^ yzx .^ (y .^ z)z(x .^ y) .^ z)r5   r   rE   rH   r\   r:   r;   r<   test_mix_number_pow_symbolsr_   l   s    b!e((((adx''''a"a%j!!_4444adx''''a!Q$i  O3333q!tai  O333333r;   c                     t          d          } t          |           dk    sJ t          d| z            dk    sJ t          t          d          dz  | z            dk    sJ t          dd| z  z             d	k    sJ d S )
NIimr[   5imr?   rN   z(3 // 2) * im   z3 + 4im)r   r5   )ra   s    r<   	test_imagre   u   s    	#Aa==D    ac??e####qttAvqj!!_4444a!e	))))))r;   c                     t          t                    dk    sJ t          t                    dk    sJ t          t                     dk    sJ t          t          j                  dk    sJ t          t          j                  dk    sJ t          t          j                  dk    sJ t          t          d                    dk    sJ d S )Nr   Infz-InfNaNerP   )r5   r   r   r   NegativeInfinityrh   Exp1r   r:   r;   r<   test_constantsrl   }   s    b>>T!!!!b>>U""""rc??f$$$$a())V3333ae%%%%af$$$$c!ff$$$$$$r;   c                      t          dt          z            dk    sJ t          dt          z            dk    sJ t          dt          z            dk    sJ d S )NrN   z
2 * goldenz2 * catalanz2 * eulergamma)r5   r   r   r   r:   r;   r<   test_constants_otherrn      s`    am$$4444ai  M1111a
l##'7777777r;   c                     t          t          t          z            dk    sJ t          t          t          z            dk    sJ t          t                     dk    sJ t          t          t          z  t          z            dk    sJ t          t          t          z  t          z            dk    sJ t          t          t          z  t          z            dk    sJ t          t          t          z  t          z            dk    sJ d S )Nzx && yzx || yz!xzx && y && zzx || y || zzz || x && yzz && (x || y))r5   rE   rH   r\   r:   r;   r<   test_booleanrp      s    a!e((((a!e((((qb>>T!!!!a!eai  M1111a!eai  M1111q1uk""m3333q1uk""o555555r;   c                     t          t          t                              dk    sJ t          t          t          dz                       dk    sJ t          t          t          t          dz   z                      dk    sJ d S )Nzsinc(x / pi)r?   zsinc((x + 3) / pi)zsinc(x + 3))r5   r   rE   r   r:   r;   r<   	test_sincrr      st    d1gg.0000d1q5kk""&:::::d2Q<(())]::::::r;   c            	         t          t          dddg                    dk    sJ t          dt          t          dz            t	          t                    gddt
          gdt          d          t          t                    gg          } d}t          |           |k    sJ t          | d d df                   dk    sJ t          | dd d f                   dk    sJ t          t          ddg                     d	k    sJ t          t          dd
g                     dk    sJ t          t          t          t          t          z
  t           gg                    dk    sJ d S )NrP   
   z[10]rN   r   zB[1 sin(x / 2)  abs(x);
0          1      pi;
0          e ceil(x)]z	[1, 0, 0]z[1 sin(x / 2) abs(x)]zzeros(0, 0)r?   zzeros(0, 3)z[x x - y -y])	r5   r"   r   rE   rK   r   r   r   rH   Aexpecteds     r<   test_Matricesrx      s`   fQB4(())V3333C!HHc!ff%Ar
CFFGAJJ') 	* 	*A(H a==H$$$$a!f,,,,a!!!f!88888fQ2&&''=8888fQ2&&''=8888fq!a%!n-..//>AAAAAAr;   c                      t          dt          dt          z            dt          z  t          z  dz  gg          } t	          |           dk    sJ t	          | j                  dk    sJ d S )NrP   rN   r?   r[   z"[1 sin(2 ./ x) (3 // 5) * pi ./ x]z$[1, sin(2 ./ x), (3 // 5) * pi ./ x])r"   r   rE   r   r5   Trv   s    r<   test_vector_entries_hadamardr|      sg    C!HHad1fQh'())Aa==@@@@@ac??DDDDDDDr;   c                      t          dt          dt          z            dt          z  t          z  dz  gddt          t          z  gg          } d}t          |           |k    sJ d S )NrP   rN   r?   r[   z.[1 sin(2/x) 3*pi/(5*x);
1        2        x*y])r"   r   rE   r   rH   r5   ru   s     r<   "test_Matrices_entries_not_hadamardr~      sa    
 	C!HHad1fQh'!Q!566A)Ha==H$$$$$$r;   c                  B   t          dd          } t          d| |           }t          d| |           }t          ||z            dk    sJ t          ||z            dk    sJ t          d|z  |z            d	k    sJ t          |dz  |z            d
k    sJ t          ||dt          |           z  z   z            dk    sJ t          |t          dz  z            dk    sJ t          |dz            dk    sJ t          |t
          j        z            dk    sJ d S )NnT)integerrv   BzA * BzB * ArN   z	2 * A * Bz	2 * B * Ar?   zA * (3 * eye(n) + B)zA ^ (x .^ 2)zA ^ 3zA ^ (1 // 2))r   r#   r5   r$   rE   r   rX   )r   rv   r   s      r<   test_MatrixSymbolr      s?   sD!!!AS!QAS!QAac??g%%%%ac??g%%%%ac!e++++ac!e++++aQx{{]*+,,0FFFFFa!Q$i  N2222adw&&&&ai  N222222r;   c                  P    t          dt          d          z            dk    sJ d S )N   r?   z
6 * eye(3))r5   r$   r:   r;   r<   test_special_matricesr      s+    am$$444444r;   c            	         t          dddddddggdd	d
gdg          dk    sJ t          d          dk    sJ t          dg          dk    sJ t          d          dk    sJ t          t          g d           dk    sJ t          dt          t          z  dt          dz  ff          dk    sJ t          dt	          d          t          ddg           g f          dk    sJ d S )NrP   rN   r?   rd   r[   r   r@      rB   rt      z5Any[1, 2, 3, Any[4, 5, Any[6, 7]], 8, Any[9, 10], 11])rP   rN   )r?   rd   z(1, 2, (3, 4))zAny[1])rP   z(1,)rP   rN   r?   z	(1, 2, 3)z(1, x .* y, (3, x .^ 2))r   z.(1, [1 0 0;
0 1 0;
0 0 1], zeros(0, 0), Any[]))r5   r
   rE   rH   r!   r"   r:   r;   r<   test_containersr      s   q!QA1vAr7B?@@?@ @ @ @n%%)99999qc??h&&&&dv%%%%eYYY'((K7777q!A#1a4y)**.HHHHHq#a&&&Ar"2"2B788<nnnnnnnr;   c                      t          t          t          z   t          z  dd          } dt          j        d          z  }| |k    sJ d S )NmeF	assign_toinlinez)const Catalan = %s
me = (x + y) / Catalan   )r5   rE   rH   r   evalf)sourcerw   s     r<   test_julia_noninliner      sP    1geDDDF	!bH Xr;   c                     t          t          t          dk     ft          dz  df          t                    dk    sJ t          d          dk    sJ t          dd	          d
k    sJ t          t          dz  t          dk     ft          dz  t          dk     ft          dz  t          dk     ft          dz  df          d} t                    | k    sJ t          d          d| z   k    sJ t          dd	          dk    sJ t          t          t          dk     ft          dz  t          dk    ft          t                    t          dk    f          t	          t
          fd           d S )NrP   rN   Tz((x < 1) ? (x) : (x .^ 2))rr   zr = ((x < 1) ? (x) : (x .^ 2))Fr   z,if (x < 1)
    r = x
else
    r = x .^ 2
endr?   rd   r[   zI((x < 1) ? (x .^ 2) :
(x < 2) ? (x .^ 3) :
(x < 3) ? (x .^ 4) : (x .^ 5))zr = zmif (x < 1)
    r = x .^ 2
elseif (x < 2)
    r = x .^ 3
elseif (x < 3)
    r = x .^ 4
else
    r = x .^ 5
endr   c                  "    t                     S )Nr4   )exprs   r<   <lambda>z&test_julia_piecewise.<locals>.<lambda>  s    z$// r;   )r   rE   r5   r   r   
ValueError)rw   r   s    @r<   test_julia_piecewiser      s   aQZ!Q$..Dd;;;;;dc***(* * * *dc%888	    adAE]QT1q5MAqD!a%=1a4,OOD1H dx''''dc***fx.?????dc%888		 	 	 	 aQZ!Q$AQQ@@D
:////00000r;   c                  >   t          t          t          dk     ft          dz  df          } t          d| z            dk    sJ t          | t          z            dk    sJ t          | t          t          z  z            dk    sJ t          | dz            dk    sJ d S )	NrP   rN   Tz2 * ((x < 1) ? (x) : (x .^ 2))z((x < 1) ? (x) : (x .^ 2)) ./ xz&((x < 1) ? (x) : (x .^ 2)) ./ (x .* y)r?   z((x < 1) ? (x) : (x .^ 2)) / 3)r   rE   r5   rH   )pws    r<    test_julia_piecewise_times_constr     s    	Aq1u:1d|	,	,Bad?????bd@@@@@b!A#h#KKKKKbd???????r;   c                      t          g dg          } t          | d          dk    sJ t          ddgddgg          } t          | d	          d
k    sJ d S )Nr   ar   za = [1 2 3]rP   rN   r?   rd   rv   zA = [1 2;
3 4])r"   r5   r{   s    r<   test_julia_matrix_assign_tor     sr    			{Aa3'''=8888AA  Aa3'''+<<<<<<<r;   c                     t          g dg          t          ddd          } t          ddd          t          |           dk    sJ t          t          fd	           t          t          fd
           d S )Nr   r   rP   r?   CrN   r   zB = [1 2 3]c                  0    t           t                    S Nr   )r5   rE   r{   s   r<   r   z2test_julia_matrix_assign_to_more.<locals>.<lambda>  s    z!q999 r;   c                  &    t                     S r   r4   rv   r   s   r<   r   z2test_julia_matrix_assign_to_more.<locals>.<lambda>      z!q999 r;   r"   r#   r5   r   r   r   rv   r   s    @@r<    test_julia_matrix_assign_to_morer     s    			{AS!QAS!QAa1%%%6666
:9999:::
:99999:::::r;   c                      t          dgg          t          ddd          } t          ddd          t          |           dk    sJ t          t          fd           d S )	Nr?   r   rP   r   rN   r   zB = [3]c                  &    t                     S r   r4   r   s   r<   r   z'test_julia_matrix_1x1.<locals>.<lambda>'  r   r;   r   r   s    @@r<   test_julia_matrix_1x1r      sx    uAS!QAS!QAa1%%%2222 :99999:::::r;   c                     t          t          dt          t          z  gg          } t          | d         dz  | d         z   | d         z             dk    sJ t	          ddd          } t          |           dk    sJ t          | d         dz  t          | d                   z   | d         z             d	k    sJ t          t          |                     d
k    sJ d S )NrN   r   r   )r   rP   )r   rN   zx .^ 2 + x .* y + 2AArP   r?   z%sin(AA[1,2]) + AA[1,1] .^ 2 + AA[1,3]zAA[1,1] + AA[1,2] + AA[1,3])r"   rE   rH   r5   r#   r   sumr{   s    r<   test_julia_matrix_elementsr   *  s    Aqs}Aagqj1T7*QtW4559NNNNNT1a  Aa==D    agqj3qv;;.378823 3 3 3c!ff!>>>>>>>r;   c                      t          d          dk    sJ t          t          j                  dk    sJ t          d          dk    sJ t          t          j                  dk    sJ d S )NTtrueFfalse)r5   r   r   r   r:   r;   r<   test_julia_booleanr   4  sp    dv%%%%af''''e''''ag'))))))r;   c                  (   t          t                    5  t          t          j                   d d d            n# 1 swxY w Y   t          d          } t           | t                                        t                    d          dk    sJ d S )NfF)strictz:# Not supported in Julia:
# Derivative
Derivative(f(x), x))r   NotImplementedErrorr5   r   ComplexInfinityr   rE   diff)r   s    r<   test_julia_not_supportedr   ;  s    	#	$	$ & &1$%%%& & & & & & & & & & & & & & & 	Aaaddiill5111	     s   ;??c                      t          d          } t          d          }t          | t          dk     f|t          dk    fd          }t          |d          dk    sJ d S )	Nendless	elsewherer   rP   )rP   TF)r   zCif (x < 0)
    endless
elseif (x <= 1)
    elsewhere
else
    1
end)r   r   rE   r5   )t1t2r   s      r<   %test_trick_indent_with_end_else_wordsr   G  sl    	
9B	
;B	BA;Q!Vi	8	8Bb'''	     r;   c                     t          ddd          } t          ddd          }t          ddd          }t          ddd          }t          | |          }t          |          dk    sJ t          ||z            dk    sJ t          ||z  |z            d	k    sJ t          || z            d
k    sJ t          |t          z  t          z            dk    sJ d S )Nrv   r?   r   vrP   hzA .* Bz(A .* B) * vzh * (A .* B) * vz(A .* B) * Az(x .* y) * (A .* B))r#   r%   r5   rE   rH   )rv   r   r   r   r   s        r<   test_haramardr   V  s    S!QAS!QAS!QAS!QA1Aa==H$$$$ac??n,,,,ac!e 22222ac??n,,,,ac!e 5555555r;   c                      t          ddi           } d| d<   d| d<   d| d<   d	| d
<   t          t          z  | d<   t          |           dk    sJ d S )Nr[   r   rt   )rN   rN      )rP   rN      )rP   r?      )r   r?   )r?   r   zHsparse([4, 2, 3, 1, 2], [1, 3, 3, 4, 4], [x .* y, 20, 10, 30, 22], 5, 6))r&   rE   rH   r5   )Ms    r<   test_sparser   d  sn    Q2AAdGAdGAdGAdGcAdGa==R     r;   c                     t          d          } t          t          t          t          fD ].}t           || t                              |j        dz   k    sJ /t          t          t          t          fD ]-}t           |t                              |j        dz   k    sJ .t          t          | t                              dk    sJ t          t          | t                              dk    sJ t          t          | t                              dk    sJ t          t          | t                              dk    sJ d S )Nr   z(n, x)z(x)zhankelh1(n, x)zhankelh2(n, x)z?sqrt(2) * sqrt(pi) * sqrt(1 ./ x) .* besselj(n + 1 // 2, x) / 2z?sqrt(2) * sqrt(pi) * sqrt(1 ./ x) .* bessely(n + 1 // 2, x) / 2)r   r)   r*   r+   r,   r5   rE   __name__r/   r1   r0   r2   r-   r.   r'   r(   )r   r   s     r<   test_specfunr   p  s#   sAw1 < <!!Aq''""aj8&;;;;;;k6;7 6 6!!A$$1:#555555gamm$$(88888gamm$$(88888bAhh#dddddbAhh#dddddddr;   c                  F   t          ddd          } t          ddd          }t          ddd          }t          | d                   dk    sJ t          d| d         z            dk    sJ |d                             || |z
            }t          |          d	k    sJ d S )
Nrv   rP   r?   r   r   r   zA[1,1]z
3 * A[1,1]z(A - B)[1,1])r#   r5   subs)rv   r   r   Fs       r<   test_MatrixElement_printingr   |  s    S!QAS!QAS!QAag(****a!D'k""l2222	$QAAa==N******r;   N)^
sympy.corer   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   sympy.functionsr   r   r   r   r   r   r   sympy.testing.pytestr   sympy.utilities.lambdifyr    sympy.matricesr!   r"   r#   r$   r%   r&   sympy.functions.special.besselr'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   sympy.printing.juliar5   rE   rH   r\   r=   rF   rI   rL   rS   rV   rY   r]   r_   re   rl   rn   rp   rr   rx   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r:   r;   r<   <module>r      s  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I ' ' ' ' ' ' 9 9 9 9 9 9; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;N N N N N N N N N N N N N N N N N N N N N N N N N N N N ' & & & & & + + + + + +
''

1a+ + +
: : :, , ,/ / /	Y 	Y 	Y" " "2 2 2A A A64 4 4* * *% % %8 8 86 6 6; ; ;
B B B&E E E % % %3 3 35 5 5	o 	o 	o  1 1 1@@ @ @= = =; ; ;; ; ;? ? ?* * *	 	 	  6 6 6	 	 		e 	e 	e
, 
, 
, 
, 
,r;   