U
    9%ei,                     @   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/Darija-Ai-API/env/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st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   	   2z-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st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stt t| | dkstt tt| | dkst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   )p1p2r/   r/   r0   test_ModC   s    rH   c                   C   s,   t tddkstt tddks(td S )NC   Z67z-1)r+   r   r.   r/   r/   r/   r0   test_jscode_IntegerN   s    rK   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st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
     rL   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st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   rM   rN   r/   r/   r0   test_jscode_inline_function[   s     rS   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    rT   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stt ttB t@ dkst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    rV   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)
))crR   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/   rX   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    "	ra   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   rZ      r[   z&test_jscode_settings.<locals>.<lambda>)r#   	TypeErrorr/   r/   r/   r0   test_jscode_settings   s    re   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sttd|||f }	||	d|| | ||  |  kst|jt kstd S )Nzn m oTrP   rN   jkr-   zx[j]rM   zA[%s]BzB[%s])r   r'   r$   setZ_not_cr&   Z_print_Indexedr.   )
rO   morN   rf   rg   r^   r-   rM   rh   r/   r/   r0   test_jscode_Indexed   s    "*rl   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 mTrP   rM   r-   r7   rN   rf   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];
   }
}rR   r   r&   r'   r+   r.   )	rO   rj   rM   r-   r7   rN   rf   r_   rW   r/   r/   r0   test_jscode_loops_matrix_vector   s    


 ro   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)rQ   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mcountrR   )r   r   r&   r'   labelZdummy_indexr+   r.   )rN   rj   r-   r7   expectedcoder/   r/   r0   test_dummy_loops   s    
rt   c            
      C   s   t ddd\} }td}td}td}td}td|}td	| }d
}t|||f ||  ||  ||  || d}	|	|kstd S )Nrm   TrP   rM   r-   r7   rU   rN   rf   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];
   }
}rR   rn   )
rO   rj   rM   r-   r7   rU   rN   rf   r_   rW   r/   r/   r0   test_jscode_loops_add   s    


0ru   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std S )Nn m o pTrP   abr7   rN   rf   rg   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];
         }
      }
   }
}rR   rn   )rO   rj   rk   r^   rw   rx   r7   rN   rf   rg   ry   r_   rW   r/   r/   r0   'test_jscode_loops_multiple_contractions   s     



>*r{   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 )Nrv   TrP   rw   rx   rW   r7   rN   rf   rg   ry   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];
rz   rR   rn   )rO   rj   rk   r^   rw   rx   rW   r7   rN   rf   rg   ry   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std S )Nrv   TrP   rw   rx   rW   r7   rN   rf   rg   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];
rR   rJ   rn   )rO   rj   rk   r^   rw   rx   rW   r7   rN   rf   rg   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st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   TrM   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   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-   r7   r   r   rU   r)   r+   r.   r   r   )matrM   rY   r   r   rj   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 )
NrM   r6   r2   rh   Cr   zA[0]z3*A[0]z
(A - B)[0])r)   r+   r.   subs)rM   rh   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   rU   r1   r3   r8   r9   r<   rC   rD   rH   rK   rL   rS   rT   rV   r`   ra   re   rl   ro   rt   ru   r{   r|   r   r   r   r/   r/   r/   r0   <module>   sB   PD		
0(