o
    8Va,                     @   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 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:S );    )pioosymbolsRationalIntegerGoldenRatio
EulerGammaCatalanLambdaDummySEqNeLeLtGtGe)	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
J d S )NMath.abs(x))r+   r   x r.   r.   B/usr/lib/python3/dist-packages/sympy/printing/tests/test_jscode.pytest_printmethod   s   r0   c                   C   sF   t ttdks
J t td dksJ t ttjd  dks!J d S )NzMath.sqrt(x)g      ?   zMath.cbrt(x))r+   r   r-   r   ZOner.   r.   r.   r/   test_jscode_sqrt   s   r2   c                  C   s   t dttdt } ttd dksJ tttd  dks J td| td ttt    td t  dks:J ttd	 d
ksDJ d S )Ng   r1   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+   y)r3   r.   r.   r/   test_jscode_Pow   s   *r7   c                   C   sJ   t tddks
J t tdksJ t tdksJ t t dks#J d S )Nr5   zMath.EzMath.PIzNumber.POSITIVE_INFINITYzNumber.NEGATIVE_INFINITY)r+   r   r   r   r.   r.   r.   r/   test_jscode_constants_mathh$   s   r8   c                   C   s^   t dt dtd ksJ t dt dtd ksJ t dt dtd ks-J d S )Nr4   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/   test_jscode_constants_other+   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 d S )
Nr1      z3/7   	   2iz-3/7)r+   r   r.   r.   r.   r/   test_jscode_Rational3   s   rA   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)	r+   r   r-   r6   r   r   r   r   r   r.   r.   r.   r/   test_Relational:   s   rB   c                   C   s,   t tddks
J t tddksJ d S )NC   Z67z-1)r+   r   r.   r.   r.   r/   test_jscode_IntegerD      rE   c                   C   s   t tttt dksJ t tttt dksJ t tttttt dks,J t t	tt
t dks:J t tttt dksHJ 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    r6   r!   r   r   r   r   r.   r.   r.   r/   test_jscode_functionsI   s
     rG   c                  C   s   t d} tdt| d|  }t|| dksJ tdt| d|  t }t|| dtd ks3J td}tdt d	d
d}tdt| | d|   d|   }t||| || ddks`J d S )Nr-   r3   r4   z2*xzvar Catalan = %s;
2*x/Catalanr9   AinTintegerr5   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-   r3   rH   rI   r.   r.   r/   test_jscode_inline_functionQ   s    rN   c                   C   s,   t ttdks
J t ttdksJ d S )NzMath.ceil(x)r,   )r+   r   r-   r   r.   r.   r.   r/   test_jscode_exceptionsa   rF   rO   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))r+   r-   r6   zr.   r.   r.   r/   test_jscode_booleanf   s   rQ   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 ttdk ftd tdkftttdkf tt fd	d
 d S )Nr5   r4   Tz,((x < 1) ? (
   x
)
: (
   Math.pow(x, 2)
))crM   z8if (x < 1) {
   c = x;
}
else {
   c = Math.pow(x, 2);
}r   c                      s   t  S )Nr*   r.   exprr.   r/   <lambda>   s    z'test_jscode_Piecewise.<locals>.<lambda>)r   r-   r+   r   r"   
ValueErrorpsr.   rS   r/   test_jscode_Piecewisep   s   	
,rZ   c                  C   s6   t dtttdk ftd df } d}| |ksJ d S )Nr4   r5   Tz.2*((x < 1) ? (
   x
)
: (
   Math.pow(x, 2)
)))r+   r   r-   rW   r.   r.   r/   test_jscode_Piecewise_deep   s   "	r[   c                   C   s   t tdd  d S )Nc                   S   s   t ttddS )NZgarbage)method)r+   r   r-   r.   r.   r.   r/   rU      s    z&test_jscode_settings.<locals>.<lambda>)r"   	TypeErrorr.   r.   r.   r/   test_jscode_settings   s   r^   c                  C   s   ddl m} m} ddlm} |ddd\}}}|d||d||d	|}}}t }	t |	_| d
| }
|	|
dks>J | d||f }|	|d|| |  ksUJ | d|||f }|	|d|| | ||  |  kssJ |	jt ks{J d S )Nr   r%   r   zn m oTrK   rI   jkr-   zx[j]rH   zA[%s]BzB[%s])	sympy.tensorr&   r'   sympyr   r#   setZ_not_cZ_print_Indexed)r&   r'   r   rJ   morI   r`   ra   rX   r-   rH   rb   r.   r.   r/   test_jscode_Indexed   s   "*rh   c            	      C   sp   t ddd\} }td}td}td}td|}td| }d	}t|||f ||  || d
}||ks6J d S )Nn mTrK   rH   r-   r6   rI   r`   zfor (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];
   }
}rM   )r   r&   r'   r+   )	rJ   rf   rH   r-   r6   rI   r`   rY   rR   r.   r.   r/   test_jscode_loops_matrix_vector   s   

 
rj   c                  C   sd   t ddtd\} }td}td}t| |} d| jj|jd }t||  ||  d}||ks0J d S )	Nzi mT)rL   clsr-   r6   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mcountrM   )r   r   r&   r'   ZlabelZdummy_indexr+   )rI   rf   r-   r6   Zexpectedcoder.   r.   r/   test_dummy_loops   s   
rm   c                  C   s   ddl m} m} ddlm} |ddd\}}| d}| d}| d	}| d
}|d|}	|d|}
d}t||	|
f ||
  ||	  ||	  ||	 d}||ksPJ d S )Nr   r%   r_   ri   TrK   rH   r-   r6   rP   rI   r`   zfor (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];
   }
}rM   rc   r&   r'   rd   r   r+   )r&   r'   r   rJ   rf   rH   r-   r6   rP   rI   r`   rY   rR   r.   r.   r/   test_jscode_loops_add   s   

0
ro   c                  C   s   ddl m} m} ddlm} |ddd\}}}}| d}| d}| d	}	|d
|}
|d|}|d|}|d|}d|
| | | || |  ||  | || | ||  | f d }t||||f ||
|||f  |	|
 d}||kswJ d S )Nr   r%   r_   n m o pTrK   abr6   rI   r`   ra   lzfor (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];
         }
      }
   }
}rM   rn   )r&   r'   r   rJ   rf   rg   rX   rq   rr   r6   rI   r`   ra   rs   rY   rR   r.   r.   r/   'test_jscode_loops_multiple_contractions   s$   



>*ru   c                  C   s0  ddl m} m} ddlm} |ddd\}}}}| d}| d}| d	}	| d
}
|d|}|d|}|d|}|d|}d|| | | || |  ||  | || | | || |  ||  | || | ||  | f d }t|||||f |||||f  |	|||f  |
| d}	|	|ksJ d S )Nr   r%   r_   rp   TrK   rq   rr   rR   r6   rI   r`   ra   rs   zfor (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];
rt   rM   rn   )r&   r'   r   rJ   rf   rg   rX   rq   rr   rR   r6   rI   r`   ra   rs   rY   r.   r.   r/   test_jscode_loops_addfactor	  s&   



d:rv   c                  C   s  ddl m} m} ddlm} |ddd\}}}}| d}| d}| d	}	| d
}
|d|}|d|}|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sJ d S d S d S d S d S d S )Nr   r%   r_   rp   TrK   rq   rr   rR   r6   rI   r`   ra   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];
rM   rD   rn   )r&   r'   r   rJ   rf   rg   rX   rq   rr   rR   r6   rI   r`   ra   Zs0s1s2Zs3r.   r.   r/    test_jscode_loops_multiple_terms(  sX   





Jry   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s%J td|d  tdkf|d dft|d	  |d
  }t|dksHJ 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sJ d S )Nr4   r   TrH   r1   r5   zUA[0] = x*y;
if (y > 0) {
   A[1] = x + 2;
}
else {
   A[1] = y;
}
A[2] = Math.sin(z);)r4   r   )r5   r   r   r   z?((x > 0) ? (
   2*A[2]
)
: (
   A[2]
)) + Math.sin(A[1]) + A[0]q   M)r1   r   )   r   r~   zM[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-   r6   r   r   rP   r)   r+   r   r   )ZmatrH   rT   r{   r}   rf   r.   r.   r/   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sJ td| d  dks(J |d || | }t|d	ks:J d S )
NrH   r5   r1   rb   Crz   zA[0]z3*A[0]z
(A - B)[0])r)   r+   Zsubs)rH   rb   r   Fr.   r.   r/   test_MatrixElement_printing  s   r   N)KZ
sympy.corer   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$   rc   r&   r'   Zsympy.matricesr(   r)   rd   r+   r-   r6   rP   r0   r2   r7   r8   r;   rA   rB   rE   rG   rN   rO   rQ   rZ   r[   r^   rh   rj   rm   ro   ru   rv   ry   r   r   r.   r.   r.   r/   <module>   sB   L D	

2(