U
    ZÊ¹ji,  ã                   @   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mZmZmZ 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$ d dl%m&Z& d dl'm(Z( d dl)m*Z*m+Z+ d dl,m-Z-m.Z. d dl%m/Z/ ed	ƒ\Z0Z1Z2d
d„ Z3dd„ Z4dd„ Z5dd„ Z6dd„ Z7dd„ Z8dd„ Z9dd„ Z: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/„ ZEd0d1„ ZFd2d3„ ZGd4d5„ ZHd6d7„ ZId8d9„ ZJd:d;„ ZKd<S )=é    )ÚpiÚooÚsymbolsÚRationalÚIntegerÚGoldenRatioÚ
EulerGammaÚCatalanÚLambdaÚDummyÚSÚEqÚNeÚLeÚLtÚGtÚGeÚMod)Ú	PiecewiseÚsinÚcosÚAbsÚexpÚceilingÚsqrtÚsinhÚcoshÚtanhÚasinÚacosÚacoshÚMaxÚMin)Úraises)ÚJavascriptCodePrinter)Úimplemented_function)ÚIndexedBaseÚIdx)ÚMatrixÚMatrixSymbol©Újscodezx,y,zc                   C   s   t ttƒƒdkst‚d S )NúMath.abs(x))r+   r   ÚxÚAssertionError© r/   r/   ú_/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/printing/tests/test_jscode.pyÚtest_printmethod   s    r1   c                   C   sF   t ttƒƒdkst‚t td ƒdks(t‚t ttjd  ƒdksBt‚d S )NzMath.sqrt(x)g      à?é   zMath.cbrt(x))r+   r   r-   r.   r   ZOner/   r/   r/   r0   Útest_jscode_sqrt   s    r3   c                  C   sŒ   t dttdt ƒƒ} ttd ƒdks(t‚tttd  ƒdks@t‚td| tƒd ttt    td t  ƒdkstt‚ttd	 ƒd
ksˆt‚d S )NÚgé   r2   zMath.pow(x, 3)zMath.pow(x, Math.pow(y, 3))é   g      @z;Math.pow(3.5*2*x, -x + Math.pow(y, x))/(Math.pow(x, 2) + y)g      ð¿z1/x)r%   r
   r-   r+   r.   Úy)r4   r/   r/   r0   Útest_jscode_Pow   s    *ÿr8   c                   C   sJ   t tdƒƒdkst‚t tƒdks$t‚t tƒdks4t‚t t ƒdksFt‚d S )Nr6   zMath.EzMath.PIzNumber.POSITIVE_INFINITYzNumber.NEGATIVE_INFINITY)r+   r   r.   r   r   r/   r/   r/   r0   Útest_jscode_constants_mathh$   s    r9   c                   C   s^   t dt ƒdt d¡ kst‚t dt ƒdt d¡ ks<t‚t dt ƒdt d¡ ksZt‚d S )Nr5   z#var GoldenRatio = %s;
2*GoldenRatioé   zvar Catalan = %s;
2*Catalanz!var EulerGamma = %s;
2*EulerGamma)r+   r   Úevalfr.   r	   r   r/   r/   r/   r0   Útest_jscode_constants_other+   s    ÿÿÿÿr<   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‚d S )
Nr2   é   z3/7é   é	   Ú2éùÿÿÿz-3/7éýÿÿÿ)r+   r   r.   r/   r/   r/   r0   Útest_jscode_Rational3   s    rC   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)
r+   r   r-   r7   r.   r   r   r   r   r   r/   r/   r/   r0   Útest_Relational:   s    rD   c                  C   sÀ   t tttƒƒdkst‚t tttt ƒƒdks0t‚tddd�\} }t t| |ƒƒdksVt‚t t| |d ƒƒdkspt‚t td	d
dd�ƒdksŠt‚t t| |ƒ ƒdks¢t‚t tt| |ƒ ƒdks¼t‚d S )Nz((x % y) + y) % yz#((x % (x + y)) + (x + y)) % (x + y)zp1 p2T)Zpositivezp1 % p2r2   zp1 % (p2 + 3)rB   rA   F)Úevaluatez(-3) % (-7)z
-(p1 % p2)zx*(p1 % p2))r+   r   r-   r7   r.   r   )Úp1Zp2r/   r/   r0   Útest_ModC   s    rG   c                   C   s,   t tdƒƒdkst‚t tdƒƒdks(t‚d S )NéC   Z67éÿÿÿÿz-1)r+   r   r.   r/   r/   r/   r0   Útest_jscode_IntegerN   s    rJ   c                   C   s”   t ttƒttƒ ƒdkst‚t ttƒttƒ ƒdks8t‚t tttƒt	ttƒ ƒdksXt‚t t
tƒttƒ ƒdkstt‚t ttƒttƒ ƒdks�t‚d S )Nz"Math.pow(Math.sin(x), Math.cos(x))zMath.sinh(x)*Math.cosh(x)zMath.max(x, y) + Math.min(x, y)zMath.tanh(x)*Math.acosh(y)z-Math.acos(y) + Math.asin(x))r+   r   r-   r   r.   r   r   r!   r7   r"   r   r    r   r   r/   r/   r/   r0   Útest_jscode_functionsS   s
     rK   c                  C   sÄ   t dƒ} tdt| d|  ƒƒ}t|| ƒƒdks0t‚tdt| d|  t ƒƒ}t|| ƒƒdt d¡ ksft‚tdƒ}tdt d	d
d�ƒ}tdt| | d|   d|   ƒƒ}t||| ƒ|| d�dksÀt‚d S )Nr-   r4   r5   z2*xzvar Catalan = %s;
2*x/Catalanr:   ÚAÚiÚnT©Úintegerr6   ©Z	assign_toz@for (var i=0; i<n; i++){
   A[i] = (A[i] + 1)*(A[i] + 2)*A[i];
})	r   r%   r
   r+   r.   r	   r;   r&   r'   )r-   r4   rL   rM   r/   r/   r0   Útest_jscode_inline_function[   s     ÿrR   c                   C   s,   t ttƒƒdkst‚t ttƒƒdks(t‚d S )NzMath.ceil(x)r,   )r+   r   r-   r.   r   r/   r/   r/   r0   Útest_jscode_exceptionsk   s    rS   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))r+   r-   r7   r.   Úzr/   r/   r/   r0   Útest_jscode_booleanp   s    rU   c                     sˆ   t ttdk ftd dfƒ‰ tˆ ƒ} d}| |ks2t‚tˆ dd�dksFt‚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 )Nr6   r5   Tz,((x < 1) ? (
   x
)
: (
   Math.pow(x, 2)
))ÚcrQ   z8if (x < 1) {
   c = x;
}
else {
   c = Math.pow(x, 2);
}r   c                      s   t ˆ ƒS )Nr*   r/   ©Úexprr/   r0   Ú<lambda>�   ó    z'test_jscode_Piecewise.<locals>.<lambda>)r   r-   r+   r.   r   r#   Ú
ValueError©ÚpÚsr/   rW   r0   Útest_jscode_Piecewisez   s    ÿ	
ÿ,r_   c                  C   s6   t dtttdk ftd dfƒ ƒ} d}| |ks2t‚d S )Nr5   r6   Tz.2*((x < 1) ? (
   x
)
: (
   Math.pow(x, 2)
)))r+   r   r-   r.   r\   r/   r/   r0   Útest_jscode_Piecewise_deep“   s    "ÿ	r`   c                   C   s   t tdd„ ƒ d S )Nc                   S   s   t ttƒdd�S )NÚgarbage)Úmethod)r+   r   r-   r/   r/   r/   r0   rY   ¢   rZ   z&test_jscode_settings.<locals>.<lambda>)r#   Ú	TypeErrorr/   r/   r/   r0   Útest_jscode_settings¡   s    rd   c            
      C   sÞ   t ddd�\} }}td| ƒtd|ƒtd|ƒ  }}}tƒ }tƒ |_tdƒ| }| |¡dks`t‚td	ƒ||f }| |¡d
|| |  ksŽt‚tdƒ|||f }	| |	¡d|| | ||  |  ksÊt‚|jtƒ ksÚt‚d S )Nzn m oTrO   rM   ÚjÚkr-   zx[j]rL   zA[%s]ÚBzB[%s])r   r'   r$   ÚsetZ_not_cr&   Z_print_Indexedr.   )
rN   ÚmÚorM   re   rf   r]   r-   rL   rg   r/   r/   r0   Útest_jscode_Indexed¥   s    "*rk   c            	      C   sp   t ddd�\} }tdƒ}tdƒ}tdƒ}td|ƒ}td| ƒ}d	}t|||f ||  || d
�}||kslt‚d S )Nún mTrO   rL   r-   r7   rM   re   zˆfor (var i=0; i<m; i++){
   y[i] = 0;
}
for (var i=0; i<m; i++){
   for (var j=0; j<n; j++){
      y[i] = A[n*i + j]*x[j] + y[i];
   }
}rQ   ©r   r&   r'   r+   r.   )	rN   ri   rL   r-   r7   rM   re   r^   rV   r/   r/   r0   Útest_jscode_loops_matrix_vectorµ   s    

ÿ
 rn   c                  C   sd   t ddtd�\} }tdƒ}tdƒ}t| |ƒ} d| jj|jdœ }t||  ||  d�}||ks`t‚d S )	Nzi mT)rP   Úclsr-   r7   zlfor (var i_%(icount)i=0; i_%(icount)i<m_%(mcount)i; i_%(icount)i++){
   y[i_%(icount)i] = x[i_%(icount)i];
})ZicountZmcountrQ   )r   r   r&   r'   ÚlabelZdummy_indexr+   r.   )rM   ri   r-   r7   ÚexpectedÚcoder/   r/   r0   Útest_dummy_loopsË   s    
ürs   c            
      C   sˆ   t ddd�\} }tdƒ}tdƒ}tdƒ}tdƒ}td|ƒ}td	| ƒ}d
}t|||f ||  ||  ||  || d�}	|	|ks„t‚d S )Nrl   TrO   rL   r-   r7   rT   rM   re   z’for (var i=0; i<m; i++){
   y[i] = x[i] + z[i];
}
for (var i=0; i<m; i++){
   for (var j=0; j<n; j++){
      y[i] = A[n*i + j]*x[j] + y[i];
   }
}rQ   rm   )
rN   ri   rL   r-   r7   rT   rM   re   r^   rV   r/   r/   r0   Útest_jscode_loops_addÚ   s    

ÿ
0rt   c                  C   sÖ   t ddd�\} }}}tdƒ}tdƒ}tdƒ}td|ƒ}td| ƒ}td	|ƒ}	td
|ƒ}
d||  | | || |  |	|  |
 || | |	|  |
 f d }t|||	|
f ||||	|
f  || d�}||ksÒt‚d S )Nún m o pTrO   ÚaÚbr7   rM   re   rf   ÚlzÅfor (var i=0; i<m; i++){
   y[i] = 0;
}
for (var i=0; i<m; i++){
   for (var j=0; j<n; j++){
      for (var k=0; k<o; k++){
         for (var l=0; l<p; l++){
            y[i] = a[%s]*b[%s] + y[i];
ú         }
      }
   }
}rQ   rm   )rN   ri   rj   r]   rv   rw   r7   rM   re   rf   rx   r^   rV   r/   r/   r0   Ú'test_jscode_loops_multiple_contractionsñ   s     



>ùøÿ*rz   c                  C   s  t ddd�\} }}}tdƒ}tdƒ}tdƒ}tdƒ}td|ƒ}td	| ƒ}	td
|ƒ}
td|ƒ}d||  | | |	| |  |
|  | ||  | | |	| |  |
|  | |	| | |
|  | f d }t|||	|
|f |||	|
|f  ||	|
|f  || d�}||k�st‚d S )Nru   TrO   rv   rw   rV   r7   rM   re   rf   rx   zÏfor (var i=0; i<m; i++){
   y[i] = 0;
}
for (var i=0; i<m; i++){
   for (var j=0; j<n; j++){
      for (var k=0; k<o; k++){
         for (var l=0; l<p; l++){
            y[i] = (a[%s] + b[%s])*c[%s] + y[i];
ry   rQ   rm   )rN   ri   rj   r]   rv   rw   rV   r7   rM   re   rf   rx   r^   r/   r/   r0   Útest_jscode_loops_addfactor  s"    



dùøÿ:r{   c                  C   s¬  t ddd�\} }}}tdƒ}tdƒ}tdƒ}tdƒ}td|ƒ}td	| ƒ}	td
|ƒ}
d}d||  | |	|  |
  d }d|| |
  d }d||  |	  d }t||	 |||	f  ||
 |||
f   ||	 ||
  |||	|
f   || d�}||| | |d d…  k�s¨||| | |d d…  k�s¨||| | |d d…  k�s¨||| | |d d…  k�s¨||| | |d d…  k�s¨||| | |d d…  k�s¨t‚d S )Nru   TrO   rv   rw   rV   r7   rM   re   rf   z(for (var i=0; i<m; i++){
   y[i] = 0;
}
z|for (var i=0; i<m; i++){
   for (var j=0; j<n; j++){
      for (var k=0; k<o; k++){
         y[i] = b[j]*b[k]*c[%s] + y[i];
z      }
   }
}
zUfor (var i=0; i<m; i++){
   for (var k=0; k<o; k++){
      y[i] = a[%s]*b[k] + y[i];
z   }
}
zUfor (var i=0; i<m; i++){
   for (var j=0; j<n; j++){
      y[i] = a[%s]*b[j] + y[i];
rQ   rI   rm   )rN   ri   rj   r]   rv   rw   rV   r7   rM   re   rf   Ús0Ús1Ús2Zs3r/   r/   r0   Ú test_jscode_loops_multiple_terms*  sV    


ÿýüÿ

þýÿ
þýÿD ÿÿþýüûr   c                  C   s  t tt tdt tdkftdfƒttƒgƒ} tdddƒ}t| |ƒdksJt‚td|d  tdkf|d dfƒt|d	 ƒ |d
  }t|ƒdks�t‚tdddƒ}tdddƒ}t t|d	 ƒdt	|d ƒg|d	 |d  |d dgd|d  |d	  t
|d
 ƒd dggƒ}t||ƒdk�st‚d S )Nr5   r   TrL   r2   r6   zUA[0] = x*y;
if (y > 0) {
   A[1] = x + 2;
}
else {
   A[1] = y;
}
A[2] = Math.sin(z);)r5   r   )r6   r   ©r   r   z?((x > 0) ? (
   2*A[2]
)
: (
   A[2]
)) + Math.sin(A[1]) + A[0]Úqé   ÚM)r2   r   )é   r   r„   zœM[0] = Math.sin(q[1]);
M[1] = 0;
M[2] = Math.cos(q[2]);
M[3] = q[1] + q[2];
M[4] = q[3];
M[5] = 5;
M[6] = 2*q[4]/q[1];
M[7] = Math.sqrt(q[0]) + 4;
M[8] = 0;)r(   r-   r7   r   r   rT   r)   r+   r.   r   r   )ZmatrL   rX   r�   rƒ   ri   r/   r/   r0   Útest_Matrix_printingZ  s$    ,ÿ
6ÿ$þÿ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 )
NrL   r6   r2   rg   ÚCr€   zA[0]z3*A[0]z
(A - B)[0])r)   r+   r.   Úsubs)rL   rg   r†   ÚFr/   r/   r0   Útest_MatrixElement_printing‚  s    r‰   N)LZ
sympy.corer   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   r   r   r   r   r   r   r    r!   r"   Zsympy.testing.pytestr#   Zsympy.printing.jscoder$   Zsympy.utilities.lambdifyr%   Zsympy.tensorr&   r'   Zsympy.matricesr(   r)   r+   r-   r7   rT   r1   r3   r8   r9   r<   rC   rD   rG   rJ   rK   rR   rS   rU   r_   r`   rd   rk   rn   rs   rt   rz   r{   r   r…   r‰   r/   r/   r/   r0   Ú<module>   sB   PD		
0(