o
    3Ih6                     @   s6  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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& ZId'd( ZJd)d* ZKe6d+d, ZLd-d. ZMd/d0 ZNd1d2 ZOd3d4 ZPd5d6 ZQd7d8 ZRd9d: ZSd;d< ZTd=d> ZUd?d@ ZVdAdB ZWdCdD ZXdEdF ZYdGdH ZZdIdJ Z[dKdL Z\dMdN Z]dOS )P    )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                   C   s,   t tddks
J t tddksJ d S )NC   67z-1)r4   r    r8   r8   _/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/sympy/printing/tests/test_julia.pytest_Integer   s   r:   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 // 7) * x)r4   r   xr8   r8   r8   r9   test_Rational   s   rB   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)	r4   r   rA   yr   r   r   r   r   r8   r8   r8   r9   test_Relational!   s   rD   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))r4   r   rA   r   absr   r8   r8   r8   r9   test_Function*   s   rF   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 )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)evaluater7   z-2 * x ./ (y .* y))r4   rA   rC   r   r   r   r   r   )rH   r8   r8   r9   test_Pow0   s   *rL   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)r4   rA   rC   r8   r8   r8   r9   test_basic_ops<   s   rN   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 )NrI   z1 ./ xr7   g      z1 ./ sqrt(x)g      zsqrt(x)g      ?z1 / piz1 / sqrt(pi))r4   rA   r   r   Halfr   r8   r8   r8   r9   test_1_over_x_and_sqrtC   s   ,0.,rP   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 )Nr;   z3 * xzpi * xz3 ./ xzpi ./ xzx / 3zx / pirM   z
3 * x .* yz3 * pi * x .* yzx ./ yz
3 * x ./ yzx .* y ./ zzx .* z ./ yrI   z1 ./ (x .* y)rG   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)r4   rA   r   rC   zr   r   r8   r8   r8   r9   test_mix_number_mult_symbolsQ   s0    *rS   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 )	Nr;   zpi ^ 3rG   zx .^ 2zx .^ (pi ^ 3)zx .^ yzx .^ (y .^ z)z(x .^ y) .^ z)r4   r   rA   rC   rR   r8   r8   r8   r9   test_mix_number_pow_symbolsl   s   rT   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IimrQ   5imr;   rG   z(3 // 2) * im   z3 + 4im)r   r4   )rU   r8   r8   r9   	test_imagu   s
   rY   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   Infz-InfNaNerI   )r4   r   r   r   NegativeInfinityr[   Exp1r   r8   r8   r8   r9   test_constants}   s   r_   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 )NrG   z
2 * goldenz2 * catalanz2 * eulergamma)r4   r   r   r   r8   r8   r8   r9   test_constants_other   s   r`   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))r4   rA   rC   rR   r8   r8   r8   r9   test_boolean   s   ra   c                   C   sL   t ttdks
J t ttd dksJ t tttd  dks$J d S )Nzsinc(x / pi)r;   zsinc((x + 3) / pi)zsinc(x + 3))r4   r   rA   r   r8   r8   r8   r9   	test_sinc   s    rb   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 )NrI   
   z[10]rG   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])	r4   r!   r   rA   rE   r   r   r   rC   Aexpectedr8   r8   r9   test_Matrices   s   &rg   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 )NrI   rG   r;   rQ   z"[1 sin(2 ./ x) (3 // 5) * pi ./ x]z$[1, sin(2 ./ x), (3 // 5) * pi ./ x])r!   r   rA   r   r4   Tre   r8   r8   r9   test_vector_entries_hadamard   s   $rj   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 )NrI   rG   r;   rQ   z.[1 sin(2/x) 3*pi/(5*x);
1        2        x*y])r!   r   rA   r   rC   r4   rd   r8   r8   r9   "test_Matrices_entries_not_hadamard   s   0rk   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)integerre   BzA * BzB * ArG   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"   r4   r#   rA   r   rO   )rl   re   rn   r8   r8   r9   test_MatrixSymbol   s    ro   c                   C   s   t dtd dksJ d S )N   r;   z
6 * eye(3))r4   r#   r8   r8   r8   r9   test_special_matrices   s   rq   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 )NrI   rG   r;   rX   rQ   rp   r<      r>   rc      z5Any[1, 2, 3, Any[4, 5, Any[6, 7]], 8, Any[9, 10], 11])rI   rG   )r;   rX   z(1, 2, (3, 4))zAny[1])rI   z(1,)rI   rG   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[]))r4   r	   rA   rC   r    r!   r8   r8   r8   r9   test_containers   s   ""(ru   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   )r4   rA   rC   r   evalf)sourcerf   r8   r8   r9   test_julia_noninline   s
   r}   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 )NrI   rG   Tz((x < 1) ? (x) : (x .^ 2))rrx   zr = ((x < 1) ? (x) : (x .^ 2))Frw   z,if (x < 1)
    r = x
else
    r = x .^ 2
endr;   rX   rQ   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                      s   t  S )Nr3   r8   exprr8   r9   <lambda>  s    z&test_julia_piecewise.<locals>.<lambda>)r   rA   r4   r   r   
ValueError)rf   r8   r   r9   test_julia_piecewise   s"   
:,r   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 )	NrI   rG   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   rA   r4   rC   )pwr8   r8   r9    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 )Nrt   ar   za = [1 2 3]rI   rG   r;   rX   re   zA = [1 2;
3 4])r!   r4   ri   r8   r8   r9   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 )Nrt   rn   rI   r;   CrG   r   zB = [1 2 3]c                      s   t  tdS Nr   )r4   rA   r8   ri   r8   r9   r         z2test_julia_matrix_assign_to_more.<locals>.<lambda>c                         t  dS r   r3   r8   re   r   r8   r9   r     r   r!   r"   r4   r   r   rn   r8   r   r9    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 )
Nr;   rn   rI   r   rG   r   zB = [3]c                      r   r   r3   r8   r   r8   r9   r   '  r   z'test_julia_matrix_1x1.<locals>.<lambda>r   r   r8   r   r9   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 )NrG   r   r   )r   rI   )r   rG   zx .^ 2 + x .* y + 2AArI   r;   z%sin(AA[1,2]) + AA[1,1] .^ 2 + AA[1,3]zAA[1,1] + AA[1,2] + AA[1,3])r!   rA   rC   r4   r"   r   sumri   r8   r8   r9   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)r4   r   r   r   r8   r8   r8   r9   test_julia_boolean4  s   r   c                  C   s\   t t ttj W d    n1 sw   Y  td} t| ttdddks,J d S )NfF)strictz:# Not supported in Julia:
# Derivative
Derivative(f(x), x))r   NotImplementedErrorr4   r   ComplexInfinityr   rA   diff)r   r8   r8   r9   test_julia_not_supported;  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 )	Nendless	elsewherer   rI   )rI   TF)ry   zCif (x < 0)
    endless
elseif (x <= 1)
    elsewhere
else
    1
end)r   r   rA   r4   )t1t2r   r8   r8   r9   %test_trick_indent_with_end_else_wordsG  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 )Nre   r;   rn   vrI   hzA .* Bz(A .* B) * vzh * (A .* B) * vz(A .* B) * Az(x .* y) * (A .* B))r"   r$   r4   rA   rC   )re   rn   r   r   r   r8   r8   r9   test_haramardV  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 )NrQ   rp   rc   )rG   rG      )rI   rG      )rI   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%   rA   rC   r4   )Mr8   r8   r9   test_sparsed  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 )Nrl   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+   r4   rA   __name__r.   r0   r/   r1   r,   r-   r&   r'   )rl   r   r8   r8   r9   test_specfunp  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 )
Nre   rI   r;   rn   r   r   zA[1,1]z
3 * A[1,1]z(A - B)[1,1])r"   r4   subs)re   rn   r   Fr8   r8   r9   test_MatrixElement_printing|  s   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.   r/   r0   r1   r2   sympy.printing.juliar4   rA   rC   rR   r:   rB   rD   rF   rL   rN   rP   rS   rT   rY   r_   r`   ra   rb   rg   rj   rk   ro   rq   ru   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r8   r8   r9   <module>   sZ   D  $ 8			
	

	 


