o
    8Va4                     @   s*  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 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.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 d dlm5Z5 d d	l6m7Z7 ed
\Z8Z9Z:dd Z;dd Z<dd Z=dd Z>dd Z?dd Z@dd ZAdd ZBdd ZCdd ZDdd  ZEd!d" ZFd#d$ ZGd%d& ZHd'd( ZIe5d)d* ZJd+d, ZKd-d. ZLd/d0 ZMd1d2 ZNd3d4 ZOd5d6 ZPd7d8 ZQd9d: ZRd;d< ZSd=d> ZTd?d@ ZUdAdB ZVdCdD ZWdEdF ZXdGdH ZYdIdJ ZZdKdL Z[dMS )N    )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)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                   C   s,   t tddks
J t tddksJ d S )NC   Z67z-1)r3   r    r6   r6   A/usr/lib/python3/dist-packages/sympy/printing/tests/test_julia.pytest_Integer   s   r8   c                   C   s   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 d
ks9J t tddt dksFJ d S )N      z3/7   	   2iz-3/7zx + 3/7z3*x/7)r3   r   xr6   r6   r6   r7   test_Rational   s   r@   c                   C   s   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s7J t tttdksBJ d S )Nzx == yzx != yzx <= yzx < yzx > yzx >= y)	r3   r   r?   yr   r   r   r   r   r6   r6   r6   r7   test_Relational!   s   rB   c                   C   sH   t tttt 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))r3   r   r?   r   absr   r6   r6   r6   r7   test_Function*   s   rD   c               
   C   s   t td dks
J t ttd  dksJ t ttdd dks#J tdttdt } t d| td ttt    td t  d	ksGJ t td
tttttddddddddks_J d S )Nr9   zx.^3z	x.^(y.^3)   zx.^(2/3)g   g      @z"(3.5*2*x).^(-x + y.^x)./(x.^2 + y)F)Zevaluater5   z-2*x./(y.*y))r3   r?   rA   r   r   r   r   r   )rF   r6   r6   r7   test_Pow0   s   *rI   c                   C   sR   t tt dks
J t tt dksJ t tt dksJ t t dks'J d S )Nx.*yzx + yzx - yz-x)r3   r?   rA   r6   r6   r6   r7   test_basic_ops<   s   rK   c                   C   s"  t dt dks
J t td t td   krdks J  J t dtt dks,J t ttj  t td   krAdksDJ  J t ttdksNJ t ttj t td   krbdkseJ  J t dt d	ksoJ t td t td   krd	ksJ  J t td d
ksJ d S )NrG   z1./xr5   g      z
1./sqrt(x)g      zsqrt(x)g      ?z1/piz
1/sqrt(pi))r3   r?   r   r   Halfr   r6   r6   r6   r7   test_1_over_x_and_sqrtC   s   ,0.,rM   c                   C   sJ  t dt dks
J t tt dksJ t dt dksJ t tt dks(J t td dks2J t tt dks<J t tt dksFJ t dt t d	ksRJ t dt t t d
ks`J t tt dksjJ t dt t dksvJ t tt t dksJ t tt t dksJ t dt t dksJ t dt t t t dksJ t dt t dksJ t tdd dksJ t tdd t dksJ t tt t dksJ t tt t dksJ t tt tt  dksJ t tt t dksJ t td t dksJ t tdd t t t dks#J d S )Nr9   z3*xzpi*xz3./xzpi./xzx/3zx/pirJ   z3*x.*yz	3*pi*x.*yzx./yz3*x./yzx.*y./zzx.*z./yrG   z	1./(x.*y)rE   z2*pi*x./(y.*z)z3*pi./x   z3/5z3*x/5z	x./(y.*z)z
(x + y)./zz(x + y)./(x + z)z(x + y)/eulergammazx/(3*pi)z3*x.*y/(5*pi))r3   r?   r   rA   zr   r   r6   r6   r6   r7   test_mix_number_mult_symbolsQ   s0    *rP   c                   C   s   t td dks
J t td dksJ t ttd  dks J t tt dks*J t ttt  dks6J t tt t dksBJ d S )	Nr9   zpi^3rE   zx.^2z	x.^(pi^3)zx.^yz	x.^(y.^z)z	(x.^y).^z)r3   r   r?   rA   rO   r6   r6   r6   r7   test_mix_number_pow_symbolsl   s   rQ   c                  C   sd   t d} t| dksJ td|  dksJ tt dd |  dks$J tdd|   d	ks0J d S )
NIZimrN   Z5imr9   rE   z3*im/2   z3 + 4im)r   r3   )rR   r6   r6   r7   	test_imagu   s
   rT   c                   C   s   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s4J t tddks>J d S )Nr   ZInfz-InfNaNerG   )r3   r   r   r   ZNegativeInfinityrU   ZExp1r   r6   r6   r6   r7   test_constants}   s   rW   c                   C   s@   t dt dks
J t dt dksJ t dt dksJ d S )NrE   z2*goldenz	2*catalanz2*eulergamma)r3   r   r   r   r6   r6   r6   r7   test_constants_other   s   rX   c                   C   s   t tt@ dks
J t ttB dksJ t t dksJ t tt@ t@ dks)J t ttB tB dks5J t tt@ tB dksAJ t ttB t@ dksMJ d S )Nzx && yzx || yz!xzx && y && zzx || y || zzz || x && yzz && (x || y))r3   r?   rA   rO   r6   r6   r6   r7   test_boolean   s   rY   c                  C   s   t tdddgdksJ tdttd ttgddtgdtdttgg} d}t | |ks1J t | d d df dks?J t | dd d f dksMJ t tddg d	ksYJ t tdd
g dkseJ t tttt t ggdksvJ d S )NrG   
   z[10]rE   r   z<[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)r9   zzeros(0, 3)z[x x - y -y])	r3   r    r   r?   rC   r   r   r   rA   Aexpectedr6   r6   r7   test_Matrices   s   &r^   c                  C   sJ   t dtdt dt t d gg} t| dksJ t| jdks#J d S )NrG   rE   r9   rN   z[1 sin(2./x) 3*pi./(5*x)]z[1, sin(2./x), 3*pi./(5*x)])r    r   r?   r   r3   Tr\   r6   r6   r7   test_vector_entries_hadamard   s   $ra   c                  C   sH   t dtdt dt t d gddtt gg} d}t| |ks"J d S )NrG   rE   r9   rN   z.[1 sin(2/x) 3*pi/(5*x);
1        2        x*y])r    r   r?   r   rA   r3   r[   r6   r6   r7   "test_Matrices_entries_not_hadamard   s   0rb   c                  C   s   t ddd} td| | }td| | }t|| dksJ t|| dks&J td| | d	ks2J t|d | d
ks>J t||dt|    dksNJ t|td  dksZJ t|d dksdJ t|tj dksoJ d S )NnT)Zintegerr\   BzA*BzB*ArE   z2*A*Bz2*B*Ar9   zA*(3*eye(n) + B)zA^(x.^2)zA^3zA^(1/2))r
   r!   r3   r"   r?   r   rL   )rc   r\   rd   r6   r6   r7   test_MatrixSymbol   s    re   c                   C   s   t dtd dksJ d S )N   r9   z6*eye(3))r3   r"   r6   r6   r6   r7   test_special_matrices   s   rg   c                   C   s   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 dtd ffdksLJ t dtdtddg g fdks^J d S )NrG   rE   r9   rS   rN   rf   r:      r<   rZ      z5Any[1, 2, 3, Any[4, 5, Any[6, 7]], 8, Any[9, 10], 11])rG   rE   )r9   rS   z(1, 2, (3, 4))zAny[1])rG   z(1,)rG   rE   r9   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[]))r3   r	   r?   rA   r   r    r6   r6   r6   r7   test_containers   s   ""(rk   c                  C   s4   t tt t ddd} dtd }| |ksJ d S )NmeF	assign_toinlinez'const Catalan = %s
me = (x + y)/Catalan   )r3   r?   rA   r   Zevalf)sourcer]   r6   r6   r7   test_julia_noninline   s
   rr   c                     s  t ttdk ftd df t dksJ t dddksJ t ddd	d
ks*J t td tdk ftd tdk ftd tdk ftd df d} t | ksQJ t ddd|  ks]J t ddd	dkshJ t ttdk ftd tdkftttdkf tt fdd d S )NrG   rE   Tz((x < 1) ? (x) : (x.^2))rrn   zr = ((x < 1) ? (x) : (x.^2))Frm   z*if (x < 1)
    r = x
else
    r = x.^2
endr9   rS   rN   zA((x < 1) ? (x.^2) :
(x < 2) ? (x.^3) :
(x < 3) ? (x.^4) : (x.^5))zr = zeif (x < 1)
    r = x.^2
elseif (x < 2)
    r = x.^3
elseif (x < 3)
    r = x.^4
else
    r = x.^5
endr   c                      s   t  S )Nr2   r6   exprr6   r7   <lambda>   s    z&test_julia_piecewise.<locals>.<lambda>)r   r?   r3   r   r   
ValueError)r]   r6   ru   r7   test_julia_piecewise   s"   
:,ry   c                  C   sr   t ttdk ftd df} td|  dksJ t| t dks!J t| tt  dks-J t| d dks7J d S )	NrG   rE   Tz2*((x < 1) ? (x) : (x.^2))z((x < 1) ? (x) : (x.^2))./xz ((x < 1) ? (x) : (x.^2))./(x.*y)r9   z((x < 1) ? (x) : (x.^2))/3)r   r?   r3   rA   )pwr6   r6   r7    test_julia_piecewise_times_const  s
   r{   c                  C   sN   t g dg} t| dddksJ t ddgddgg} t| d	dd
ks%J d S )Nrj   art   za = [1 2 3]rG   rE   r9   rS   r\   zA = [1 2;
3 4])r    r3   r`   r6   r6   r7   test_julia_matrix_assign_to  s   r}   c                     sd   t g dg tddd} tdddt | ddksJ tt fd	d
 tt fdd
 d S )Nrj   rd   rG   r9   CrE   rt   zB = [1 2 3]c                      s   t  tdS Nrt   )r3   r?   r6   r`   r6   r7   rw         z2test_julia_matrix_assign_to_more.<locals>.<lambda>c                         t  dS r   r2   r6   r\   r~   r6   r7   rw     r   r    r!   r3   r   rx   rd   r6   r   r7    test_julia_matrix_assign_to_more  s   r   c                     sP   t dgg tddd} tdddt | ddksJ tt fdd	 d S )
Nr9   rd   rG   r~   rE   rt   zB = [3]c                      r   r   r2   r6   r   r6   r7   rw   #  r   z'test_julia_matrix_1x1.<locals>.<lambda>r   r   r6   r   r7   test_julia_matrix_1x1  s
   r   c                  C   s   t tdtt gg} t| d d | d  | d  dksJ tddd} t| dks,J t| d d t| d  | d  d	ksBJ tt| d
ksLJ d S )NrE   r   r   )r   rG   )r   rE   zx.^2 + x.*y + 2ZAArG   r9   z#sin(AA[1,2]) + AA[1,1].^2 + AA[1,3]zAA[1,1] + AA[1,2] + AA[1,3])r    r?   rA   r3   r!   r   sumr`   r6   r6   r7   test_julia_matrix_elements&  s   ("r   c                   C   sH   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)r3   r   r   r   r6   r6   r6   r7   test_julia_boolean0  s   r   c                  C   s8   t tjdks	J td} t | ttdksJ d S )Nz/# Not supported in Julia:
# ComplexInfinity
zoofz:# Not supported in Julia:
# Derivative
Derivative(f(x), x))r3   r   ZComplexInfinityr   r?   Zdiff)r   r6   r6   r7   test_julia_not_supported7  s   r   c                  C   sD   t d} t d}t| tdk f|tdkfd}t|dddks J d S )	NZendlessZ	elsewherer   rG   )rG   TF)ro   zCif (x < 0)
    endless
elseif (x <= 1)
    elsewhere
else
    1
end)r   r   r?   r3   )t1t2rz   r6   r6   r7   %test_trick_indent_with_end_else_wordsE  s   
r   c                  C   s   t ddd} t ddd}t ddd}t ddd}t| |}t|dks%J t|| dks/J t|| | d	ks;J t||  d
ksEJ t|t t dksQJ d S )Nr\   r9   rd   vrG   hzA.*Bz(A.*B)*vz
h*(A.*B)*vz(A.*B)*Az(x.*y)*(A.*B))r!   r#   r3   r?   rA   )r\   rd   r   r   r~   r6   r6   r7   test_haramardT  s   
r   c                  C   sL   t ddi } d| d< d| d< d| d< d	| d
< tt | d< t| dks$J d S )NrN   rf   rZ   )rE   rE      )rG   rE      )rG   r9      )r   r9   )r9   r   zFsparse([4, 2, 3, 1, 2], [1, 3, 3, 4, 4], [x.*y, 20, 10, 30, 22], 5, 6))r$   r?   rA   r3   )Mr6   r6   r7   test_sparseb  s   r   c                  C   s   t d} ttttfD ]}t|| t|jd ksJ q
tt	t
tfD ]}t|t|jd ks0J q!tt| tdks<J tt| tdksGJ tt| tdksRJ tt| tdks]J d S )Nrc   z(n, x)z(x)zhankelh1(n, x)zhankelh2(n, x)z2sqrt(2)*sqrt(pi)*sqrt(1./x).*besselj(n + 1/2, x)/2z2sqrt(2)*sqrt(pi)*sqrt(1./x).*bessely(n + 1/2, x)/2)r
   r'   r(   r)   r*   r3   r?   __name__r-   r/   r.   r0   r+   r,   r%   r&   )rc   r   r6   r6   r7   test_specfunn  s   r   c                  C   sx   t ddd} t ddd}t ddd}t| d dksJ td| d  dks(J |d || | }t|d	ks:J d S )
Nr\   rG   r9   rd   r~   r   zA[1,1]z3*A[1,1]z(A - B)[1,1])r!   r3   Zsubs)r\   rd   r~   Fr6   r6   r7   test_MatrixElement_printingz  s   r   N)\Z
sympy.corer   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Zsympy.functionsr   r   r   r   r   r   Zsympy.testing.pytestr   Zsympy.utilities.lambdifyr   Zsympy.matricesr   r    r!   r"   r#   r$   Zsympy.functions.special.besselr%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   Zsympyr3   r?   rA   rO   r8   r@   rB   rD   rI   rK   rM   rP   rQ   rT   rW   rX   rY   r^   ra   rb   re   rg   rk   rr   ry   r{   r}   r   r   r   r   r   r   r   r   r   r   r6   r6   r6   r7   <module>   sX   D    8			



	 


