U
    ZÊ¹j6  ã                   @   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t‚t tdƒƒdks(t‚d S )NéC   Z67éÿÿÿÿz-1)r3   r   ÚAssertionError© r7   r7   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/printing/tests/test_julia.pyÚtest_Integer   s    r9   c                   C   s�   t tddƒƒdkst‚t tddƒƒdks,t‚t tddƒƒdksBt‚t td	dƒƒdksXt‚t ttddƒ ƒd
ksrt‚t tddƒt ƒdksŒt‚d S )Né   é   z3 // 7é   é	   Ú2iùÿÿÿz-3 // 7éýÿÿÿz
x + 3 // 7z(3 // 7) * x)r3   r   r6   Úxr7   r7   r7   r8   Útest_Rational   s    rA   c                   C   sˆ   t tttƒƒdkst‚t tttƒƒdks,t‚t tttƒƒdksBt‚t tttƒƒdksXt‚t tttƒƒdksnt‚t t	ttƒƒdks„t‚d S )Nzx == yzx != yzx <= yzx < yzx > yzx >= y)
r3   r   r@   Úyr6   r   r   r   r   r   r7   r7   r7   r8   Útest_Relational!   s    rC   c                   C   sH   t ttƒttƒ ƒdkst‚t ttƒƒdks0t‚t ttƒƒdksDt‚d S )Nzsin(x) .^ cos(x)zabs(x)zceil(x))r3   r   r@   r   r6   Úabsr   r7   r7   r7   r8   Útest_Function*   s    rE   c               
   C   sÂ   t td ƒdkst‚t ttd  ƒdks,t‚t ttddƒ ƒdksFt‚tdttdt ƒƒ} t d| tƒd ttt    td t  ƒd	ksŽt‚t td
tttttdd�ddd�dd�ƒdks¾t‚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)Úevaluater5   z-2 * x ./ (y .* y))	r3   r@   r6   rB   r   r   r   r   r   )rG   r7   r7   r8   Útest_Pow0   s    *ÿÿÿrK   c                   C   sR   t tt ƒdkst‚t tt ƒdks(t‚t tt ƒdks<t‚t t ƒdksNt‚d S )Núx .* yzx + yzx - yz-x)r3   r@   rB   r6   r7   r7   r7   r8   Útest_basic_ops<   s    rM   c                   C   s  t dt ƒdkst‚t td ƒt td ƒ  kr8dks>n t‚t dttƒ ƒdksVt‚t ttj  ƒt td ƒ  kr~dks„n t‚t ttƒƒdks˜t‚t ttj ƒt td ƒ  kr¾dksÄn t‚t dt ƒd	ksØt‚t td ƒt td ƒ  krþd	k�sn t‚t td ƒd
k�st‚d S )NrH   z1 ./ xr5   g      ð¿z1 ./ sqrt(x)g      à¿zsqrt(x)g      à?z1 / piz1 / sqrt(pi))r3   r@   r6   r   r   ÚHalfr   r7   r7   r7   r8   Útest_1_over_x_and_sqrtC   s    *.,,rO   c                   C   s^  t dt ƒdkst‚t tt ƒdks(t‚t dt ƒdks<t‚t tt ƒdksPt‚t td ƒdksdt‚t tt ƒdksxt‚t tt ƒdksŒt‚t dt t ƒd	ks¤t‚t dt t t ƒd
ksÀt‚t tt ƒdksÔt‚t dt t ƒdksìt‚t tt t ƒdk�st‚t tt t ƒdk�s t‚t dt t ƒdk�s:t‚t dt t t t ƒdk�s\t‚t dt t ƒdk�svt‚t tdƒd ƒdk�s�t‚t tdƒd t ƒdk�s®t‚t tt t ƒdk�sÈt‚t tt t ƒdk�sât‚t tt tt  ƒdk�s t‚t tt t ƒdk�st‚t td t ƒdk�s4t‚t tdƒd t t t ƒdk�sZt‚d S )Nr:   z3 * xzpi * xz3 ./ xzpi ./ xzx / 3zx / pirL   z
3 * x .* yz3 * pi * x .* yzx ./ yz
3 * x ./ yzx .* y ./ zzx .* z ./ yrH   z1 ./ (x .* y)rF   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)r3   r@   r6   r   rB   Úzr   r   r7   r7   r7   r8   Útest_mix_number_mult_symbolsQ   s0    "rR   c                   C   sˆ   t td ƒdkst‚t td ƒdks(t‚t ttd  ƒdks@t‚t tt ƒdksTt‚t ttt  ƒdkslt‚t tt t ƒdks„t‚d S )	Nr:   zpi ^ 3rF   zx .^ 2zx .^ (pi ^ 3)zx .^ yzx .^ (y .^ z)z(x .^ y) .^ z)r3   r   r6   r@   rB   rQ   r7   r7   r7   r8   Útest_mix_number_pow_symbolsl   s    rS   c                  C   sd   t dƒ} t| ƒdkst‚td|  ƒdks,t‚tt dƒd |  ƒdksHt‚tdd|   ƒd	ks`t‚d S )
NÚIZimrP   Z5imr:   rF   z(3 // 2) * imé   z3 + 4im)r   r3   r6   )rT   r7   r7   r8   Ú	test_imagu   s
    rV   c                   C   s€   t tƒdkst‚t tƒdks t‚t t ƒdks2t‚t tjƒdksDt‚t tjƒdksVt‚t tjƒdksht‚t tdƒƒdks|t‚d S )Nr   ZInfz-InfÚNaNÚerH   )	r3   r   r6   r   r   ÚNegativeInfinityrW   ZExp1r   r7   r7   r7   r8   Útest_constants}   s    rZ   c                   C   s@   t dt ƒdkst‚t dt ƒdks(t‚t dt ƒdks<t‚d S )NrF   z
2 * goldenz2 * catalanz2 * eulergamma)r3   r   r6   r   r   r7   r7   r7   r8   Útest_constants_other‡   s    r[   c                   C   sž   t tt@ ƒdkst‚t ttB ƒdks(t‚t t ƒdks:t‚t tt@ t@ ƒdksRt‚t ttB tB ƒdksjt‚t tt@ tB ƒdks‚t‚t ttB t@ ƒdksšt‚d S )Nzx && yzx || yz!xzx && y && zzx || y || zzz || x && yzz && (x || y))r3   r@   rB   r6   rQ   r7   r7   r7   r8   Útest_boolean�   s    r\   c                  C   sð   t tdddgƒƒdkst‚tdttd ƒttƒgddtgdtdƒttƒggƒ} d}t | ƒ|ksbt‚t | d d …df ƒdks~t‚t | dd d …f ƒdksšt‚t tddg ƒƒd	ks²t‚t tdd
g ƒƒdksÊt‚t tttt	 t	 ggƒƒdksìt‚d S )NrH   é
   z[10]rF   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])
r3   r    r6   r   r@   rD   r   r   r   rB   ©ÚAÚexpectedr7   r7   r8   Útest_Matrices—   s    þra   c                  C   sJ   t dtdt ƒdt t d ggƒ} t| ƒdks4t‚t| jƒdksFt‚d S )NrH   rF   r:   rP   z"[1 sin(2 ./ x) (3 // 5) * pi ./ x]z$[1, sin(2 ./ x), (3 // 5) * pi ./ x])r    r   r@   r   r3   r6   ÚT©r_   r7   r7   r8   Útest_vector_entries_hadamardª   s    $rd   c                  C   sH   t dtdt ƒdt t d gddtt ggƒ} d}t| ƒ|ksDt‚d S )NrH   rF   r:   rP   z.[1 sin(2/x) 3*pi/(5*x);
1        2        x*y])r    r   r@   r   rB   r3   r6   r^   r7   r7   r8   Ú"test_Matrices_entries_not_hadamard±   s    0re   c                  C   sâ   t ddd�} td| | ƒ}td| | ƒ}t|| ƒdks8t‚t|| ƒdksLt‚td| | ƒd	ksdt‚t|d | ƒd
ks|t‚t||dt| ƒ   ƒdksœt‚t|td  ƒdks´t‚t|d ƒdksÈt‚t|tj ƒdksÞt‚d S )NÚnT)Úintegerr_   ÚBzA * BzB * ArF   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!   r3   r6   r"   r@   r   rN   )rf   r_   rh   r7   r7   r8   Útest_MatrixSymbol¼   s     ri   c                   C   s   t dtdƒ ƒdkst‚d S )Né   r:   z
6 * eye(3))r3   r"   r6   r7   r7   r7   r8   Útest_special_matricesÊ   s    rk   c                   C   sÂ   t dddddddggdd	d
gdgƒdks,t‚t dƒdks<t‚t dgƒdksNt‚t dƒdks^t‚t tdddgŽ ƒdksxt‚t dtt dtd ffƒdksšt‚t dtdƒtddg ƒg fƒdks¾t‚d S )NrH   rF   r:   rU   rP   rj   r;   é   r=   r]   é   z5Any[1, 2, 3, Any[4, 5, Any[6, 7]], 8, Any[9, 10], 11])rH   rF   )r:   rU   z(1, 2, (3, 4))zAny[1])rH   z(1,)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   r6   r	   r@   rB   r   r    r7   r7   r7   r8   Útest_containersÎ   s    "ÿ"rn   c                  C   s4   t tt t ddd�} dt d¡ }| |ks0t‚d S )NÚmeF©Ú	assign_toÚinlinez)const Catalan = %s
me = (x + y) / Catalané   )r3   r@   rB   r   Zevalfr6   )Úsourcer`   r7   r7   r8   Útest_julia_noninlineÚ   s
    ýru   c                     s  t ttdk ftd dfƒ‰ tˆ ƒdks*t‚tˆ dd�dks>t‚tˆ ddd	�d
ksTt‚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s¢t‚tˆ dd�d|  ksºt‚tˆ ddd	�dksÐt‚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 )NrH   rF   Tz((x < 1) ? (x) : (x .^ 2))Úr©rq   zr = ((x < 1) ? (x) : (x .^ 2))Frp   z,if (x < 1)
    r = x
else
    r = x .^ 2
endr:   rU   rP   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 )Nr2   r7   ©Úexprr7   r8   Ú<lambda>   ó    z&test_julia_piecewise.<locals>.<lambda>)r   r@   r3   r6   r   r   Ú
ValueError)r`   r7   rx   r8   Útest_julia_piecewiseã   s"    
ÿÿ:ÿ,r}   c                  C   sr   t ttdk ftd dfƒ} td|  ƒdks.t‚t| t ƒdksBt‚t| tt  ƒdksZt‚t| d ƒdksnt‚d S )	NrH   rF   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   r@   r3   r6   rB   )Úpwr7   r7   r8   Ú test_julia_piecewise_times_const  s
    r   c                  C   sP   t dddggƒ} t| dd�dks$t‚t ddgddggƒ} t| dd�d	ksLt‚d S )
NrH   rF   r:   Úarw   za = [1 2 3]rU   r_   zA = [1 2;
3 4])r    r3   r6   rc   r7   r7   r8   Útest_julia_matrix_assign_to  s    r�   c                     sf   t dddggƒ‰ tdddƒ} tdddƒ‰tˆ | d�dks<t‚tt‡ fdd	„ƒ tt‡ ‡fd
d	„ƒ d S )NrH   rF   r:   rh   ÚCrw   zB = [1 2 3]c                      s   t ˆ td�S ©Nrw   )r3   r@   r7   rc   r7   r8   rz     r{   z2test_julia_matrix_assign_to_more.<locals>.<lambda>c                      s   t ˆ ˆd�S rƒ   r2   r7   ©r_   r‚   r7   r8   rz     r{   ©r    r!   r3   r6   r   r|   ©rh   r7   r„   r8   Ú 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s8t‚tt‡ ‡fdd	„ƒ d S )
Nr:   rh   rH   r‚   rF   rw   zB = [3]c                      s   t ˆ ˆd�S rƒ   r2   r7   r„   r7   r8   rz   #  r{   z'test_julia_matrix_1x1.<locals>.<lambda>r…   r†   r7   r„   r8   Útest_julia_matrix_1x1  s
    rˆ   c                  C   sœ   t tdtt ggƒ} t| d d | d  | d  ƒdks<t‚tdddƒ} t| ƒdksXt‚t| d d t| d ƒ | d  ƒd	ks„t‚tt| ƒƒd
ks˜t‚d S )NrF   ©r   r   )r   rH   )r   rF   zx .^ 2 + x .* y + 2ZAArH   r:   z%sin(AA[1,2]) + AA[1,1] .^ 2 + AA[1,3]zAA[1,1] + AA[1,2] + AA[1,3])r    r@   rB   r3   r6   r!   r   Úsumrc   r7   r7   r8   Útest_julia_matrix_elements&  s    ("ÿr‹   c                   C   sH   t dƒdkst‚t tjƒdks"t‚t dƒdks2t‚t tjƒdksDt‚d S )NTÚtrueFÚfalse)r3   r6   r   rŒ   r�   r7   r7   r7   r8   Útest_julia_boolean0  s    rŽ   c               	   C   sH   t tƒ� ttjƒ W 5 Q R X tdƒ} t| tƒ t¡dd�dksDt‚d S )NÚfF)Ústrictz:# Not supported in Julia:
# Derivative
Derivative(f(x), x))	r   ÚNotImplementedErrorr3   r   ZComplexInfinityr   r@   Údiffr6   )r�   r7   r7   r8   Ú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@t‚d S )	NZendlessZ	elsewherer   rH   )rH   TF)rr   zCif (x < 0)
    endless
elseif (x <= 1)
    elsewhere
else
    1
end)r   r   r@   r3   r6   )Út1Út2r~   r7   r7   r8   Ú%test_trick_indent_with_end_else_wordsC  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sJt‚t|| ƒdks^t‚t|| | ƒd	ksvt‚t||  ƒd
ksŠt‚t|t t ƒdks¢t‚d S )Nr_   r:   rh   ÚvrH   ÚhzA .* Bz(A .* B) * vzh * (A .* B) * vz(A .* B) * Az(x .* y) * (A .* B))r!   r#   r3   r6   r@   rB   )r_   rh   r—   r˜   r‚   r7   r7   r8   Útest_haramardR  s    
r™   c                  C   sL   t ddi ƒ} d| d< d| d< d| d< d	| d
< tt | d< t| ƒdksHt‚d S )NrP   rj   r]   )rF   rF   é   )rH   rF   é   )rH   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$   r@   rB   r3   r6   )ÚMr7   r7   r8   Útest_sparse`  s    ÿrž   c                  C   s¾   t dƒ} ttttfD ] }t|| tƒƒ|jd kst‚qt	t
ttfD ]}t|tƒƒ|jd ksBt‚qBtt| tƒƒdksxt‚tt| tƒƒdksŽt‚tt| tƒƒdks¤t‚tt| tƒƒdksºt‚d S )Nrf   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*   r3   r@   Ú__name__r6   r-   r/   r.   r0   r+   r,   r%   r&   )rf   r�   r7   r7   r8   Útest_specfunl  s    r    c                  C   sx   t dddƒ} t dddƒ}t dddƒ}t| d ƒdks8t‚td| d  ƒdksPt‚|d  || | ¡}t|ƒd	kstt‚d S )
Nr_   rH   r:   rh   r‚   r‰   zA[1,1]z
3 * A[1,1]z(A - B)[1,1])r!   r3   r6   Úsubs)r_   rh   r‚   ÚFr7   r7   r8   Útest_MatrixElement_printingx  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sympy.printing.juliar3   r@   rB   rQ   r9   rA   rC   rE   rK   rM   rO   rR   rS   rV   rZ   r[   r\   ra   rd   re   ri   rk   rn   ru   r}   r   r�   r‡   rˆ   r‹   rŽ   r“   r–   r™   rž   r    r£   r7   r7   r7   r8   Ú<module>   sV   D   8			



	 


