
    sgi,                        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
 Z3d Z4d Z5d Z6d Z7d Z8d Z9d Z:d Z;d Z<d Z=d Z>d Z?d Z@d ZAd ZBd ZCd ZDd ZEd ZFd ZGd ZHd  ZId! ZJd" ZKy#)$    )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                  >    t        t        t                    dk(  sJ y )NMath.abs(x))r,   r   x     S/var/www/html/venv/lib/python3.12/site-packages/sympy/printing/tests/test_jscode.pytest_printmethodr3      s    #a&>]***r1   c                      t        t        t                    dk(  sJ t        t        dz        dk(  sJ t        t        t        j                  dz  z        dk(  sJ y )NzMath.sqrt(x)g      ?   zMath.cbrt(x))r,   r   r/   r   Oner0   r1   r2   test_jscode_sqrtr7      sM    $q'?n,,,!S&>^+++!aeeAg,>111r1   c                  j   t        dt        t        dt        z              } t        t        dz        dk(  sJ t        t        t        dz  z        dk(  sJ t        d | t              dz  t        t        t        z  z
  z  z  t        dz  t        z   z        dk(  sJ t        t        d	z        d
k(  sJ y )Ng   r5   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)r9   s    r2   test_jscode_Powr=      s    S&AaC.1A!Q$<++++!ad) ====!QqT#XQT**AqD1H56EF F F!T'?e###r1   c                      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 y )Nr;   zMath.EzMath.PIzNumber.POSITIVE_INFINITYzNumber.NEGATIVE_INFINITY)r,   r   r   r   r0   r1   r2   test_jscode_constants_mathhr?   $   sR    #a&>X%%%":"""":33332#;4444r1   c                     t        dt        z        dt        j                  d      z  k(  sJ t        dt        z        dt        j                  d      z  k(  sJ t        dt        z        dt	        j                  d      z  k(  sJ y )Nr:   z#var GoldenRatio = %s;
2*GoldenRatio   zvar Catalan = %s;
2*Catalanz!var EulerGamma = %s;
2*EulerGamma)r,   r   evalfr
   r	   r0   r1   r2   test_jscode_constants_otherrC   +   s    	+@;CTCTUWCXXY Y Y!G) >rAR RRRR	*=
@P@PQS@TTU U Ur1   c                      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 y )
Nr5      z3/7   	   2z-3/7)r,   r   r0   r1   r2   test_jscode_RationalrK   3   sg    (1a.!U***(2q/"c)))(1b/"f,,,(2r"#u,,,r1   c                     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(  sJ t        t        t        t                    dk(  sJ y )Nzx == yzx != yzx <= yzx < yzx > yzx >= y)	r,   r   r/   r<   r   r   r   r   r   r0   r1   r2   test_RelationalrM   :   s    "Q(x'''"Q(x'''"Q(x'''"Q(w&&&"Q(w&&&"Q(x'''r1   c                     t        t        t        t                    dk(  sJ t        t        t        t        t        z               dk(  sJ t	        dd      \  } }t        t        | |            dk(  sJ t        t        | |dz               dk(  sJ t        t        d	d
d            dk(  sJ t        t        | |             dk(  sJ t        t        t        | |      z        dk(  sJ y )Nz((x % y) + y) % yz#((x % (x + y)) + (x + y)) % (x + y)zp1 p2T)positivezp1 % p2r5   zp1 % (p2 + 3)rJ   rI   F)evaluatez(-3) % (-7)z
-(p1 % p2)zx*(p1 % p2))r,   r   r/   r<   r   )p1p2s     r2   test_ModrS   C   s    #a) 3333#aQ- $IIIIWt,FB#b"+)+++#b"q&/"o555#b"u-.-???3r2;,<///!CBK- M111r1   c                  h    t        t        d            dk(  sJ t        t        d            dk(  sJ y )NC   67z-1)r,   r   r0   r1   r2   test_jscode_IntegerrX   N   s0    '"+$&&&'"+$&&&r1   c                     t        t        t              t        t              z        dk(  sJ t        t	        t              t        t              z        dk(  sJ t        t        t        t              t        t        t              z         dk(  sJ t        t        t              t        t              z        dk(  sJ t        t        t              t        t              z
        dk(  sJ y )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<   r#   r   r!   r   r    r0   r1   r2   test_jscode_functionsrZ   S   s    #a&CF"#'KKKK$q'DG#$(CCCC#a)c!Qi'(,MMMM$q'%("#'CCCC$q'$q'/"&DDDDr1   c            	         t        d      } t        dt        | d| z              }t         ||             dk(  sJ t        dt        | d| z  t        z              }t         ||             dt	        j
                  d      z  k(  sJ t        d      }t        dt        d	d
            }t        dt        | | d| z   z  d| z   z              }t         |||         ||         dk(  sJ y )Nr/   r9   r:   z2*xzvar Catalan = %s;
2*x/CatalanrA   AinTintegerr;   	assign_toz@for (var i=0; i<n; i++){
   A[i] = (A[i] + 1)*(A[i] + 2)*A[i];
})r   r&   r   r,   r
   rB   r'   r(   )r/   r9   r\   r]   s       r2   test_jscode_inline_functionrc   [   s    AS&AaC.1A!A$<5   S&AaCK"89A!A$<;gmmB>OOOOOCACd+,AS&Aq1uIq1u,=">?A!AaD'QqT*	  r1   c                  x    t        t        t                    dk(  sJ t        t        t                    dk(  sJ y )NzMath.ceil(x)r.   )r,   r   r/   r   r0   r1   r2   test_jscode_exceptionsre   k   s/    '!*///#a&>]***r1   c                     t        t        t        z        dk(  sJ t        t        t        z        dk(  sJ t        t               dk(  sJ t        t        t        z  t        z        dk(  sJ t        t        t        z  t        z        dk(  sJ t        t        t        z  t        z        dk(  sJ t        t        t        z  t        z        dk(  sJ y )Nzx && yzx || yz!xzx && y && zzx || y || zzz || x && yzz && (x || y))r,   r/   r<   zr0   r1   r2   test_jscode_booleanrh   p   s    !a%=H$$$!a%=H$$$1":!a%!)---!a%!)---1q5A+-///1q5A+/111r1   c                  <   t        t        t        dk  ft        dz  df      t              } d}| |k(  sJ t        d      dk(  sJ t        t        t        dk  ft        dz  t        dkD  ft        t              t        dkD  f      t	        t
        fd	       y )
Nr;   r:   Tz,((x < 1) ? (
   x
)
: (
   Math.pow(x, 2)
))cra   z8if (x < 1) {
   c = x;
}
else {
   c = Math.pow(x, 2);
}r   c                      t               S )Nr+   )exprs   r2   <lambda>z'test_jscode_Piecewise.<locals>.<lambda>   s    vd| r1   )r   r/   r,   r   r$   
ValueError)psrl   s     @r2   test_jscode_Piecewiserq   z   s    aQZ!Q$.DtA  6M6$#&	 	 	 aQZ!Q$AQQ@D
:+,r1   c                  r    t        dt        t        t        dk  ft        dz  df      z        } d}| |k(  sJ y )Nr:   r;   Tz.2*((x < 1) ? (
   x
)
: (
   Math.pow(x, 2)
)))r,   r   r/   )ro   rp   s     r2   test_jscode_Piecewise_deeprs      s?    qAq1u:1d|445A  6M6r1   c                  &    t        t        d        y )Nc                  6    t        t        t              d      S )Ngarbage)method)r,   r   r/   r0   r1   r2   rm   z&test_jscode_settings.<locals>.<lambda>   s    fSVI> r1   )r$   	TypeErrorr0   r1   r2   test_jscode_settingsry      s    
9>?r1   c                     t        dd      \  } }}t        d|       t        d|      t        d|      }}}t               }t               |_        t        d      |   }|j                  |      dk(  sJ t        d	      ||f   }|j                  |      d
||z  |z   z  k(  sJ t        d      |||f   }	|j                  |	      d||z  |z  ||z  z   |z   z  k(  sJ |j                  t               k(  sJ y )Nzn m oTr_   r]   jkr/   zx[j]r\   zA[%s]BzB[%s])r   r(   r%   set_not_cr'   _print_Indexed)
r^   mor]   r{   r|   ro   r/   r\   r}   s
             r2   test_jscode_Indexedr      s    gt,GAq!#qk3sA;C!qAAuAHCAA&(((CAAA'QqSU"3333CAq!AA'QqSU1Q3Yq["999988sur1   c                      t        dd      \  } }t        d      }t        d      }t        d      }t        d|      }t        d|       }d	}t        |||f   ||   z  ||   
      }||k(  sJ y )Nn mTr_   r\   r/   r<   r]   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];
   }
}ra   r   r'   r(   r,   )	r^   r   r\   r/   r<   r]   r{   rp   rj   s	            r2   test_jscode_loops_matrix_vectorr      s}    5$'DAqCACACACACA	  	qAwqt|qt,A6M6r1   c                      t        ddt              \  } }t        d      }t        d      }t        | |      } d| j                  j
                  |j
                  dz  }t        ||    ||          }||k(  sJ y )	Nzi mT)r`   clsr/   r<   zlfor (var i_%(icount)i=0; i_%(icount)i<m_%(mcount)i; i_%(icount)i++){
   y[i_%(icount)i] = x[i_%(icount)i];
})icountmcountra   )r   r   r'   r(   labeldummy_indexr,   )r]   r   r/   r<   expectedcodes         r2   test_dummy_loopsr      s|    5$E2DAqCACAAq	A	 77&&!--@	AH
 !A$!A$'D8r1   c                     t        dd      \  } }t        d      }t        d      }t        d      }t        d      }t        d|      }t        d	|       }d
}t        |||f   ||   z  ||   z   ||   z   ||         }	|	|k(  sJ y )Nr   Tr_   r\   r/   r<   rg   r]   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];
   }
}ra   r   )
r^   r   r\   r/   r<   rg   r]   r{   rp   rj   s
             r2   test_jscode_loops_addr      s    5$'DAqCACACACACACA	  	qAwqt|ad"QqT)QqT:A6M6r1   c                     t        dd      \  } }}}t        d      }t        d      }t        d      }t        d|      }t        d|       }t        d	|      }	t        d
|      }
d|| z  |z  |z  ||z  |z  z   |	|z  z   |
z   d||z  |z  |	|z  z   |
z   ddz   }t        |||	|
f   ||||	|
f   z  ||         }||k(  sJ y )Nn m o pTr_   abr<   r]   r{   r|   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[z]*b[
] + y[i];
         }
      }
   }
}ra   r   )r^   r   r   ro   r   r   r<   r]   r{   r|   r   rp   rj   s                r2   'test_jscode_loops_multiple_contractionsr      s    D1JAq!QCACACACACACACA 78c!eAg!Ao!6Ka6OQRSTQTUVQVYZ[\Y\Q\_`Q`	b		  	qAqz!Aq!QJ-'1Q48A6M6r1   c                     t        dd      \  } }}}t        d      }t        d      }t        d      }t        d      }t        d|      }t        d	|       }	t        d
|      }
t        d|      }d|| z  |z  |z  |	|z  |z  z   |
|z  z   |z   d|| z  |z  |z  |	|z  |z  z   |
|z  z   |z   d|	|z  |z  |
|z  z   |z   ddz   }t        |||	|
|f   |||	|
|f   z   ||	|
|f   z  ||         }||k(  sJ y )Nr   Tr_   r   r   rj   r<   r]   r{   r|   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++){
      for (var k=0; k<o; k++){
         for (var l=0; l<p; l++){
            y[i] = (a[z] + b[z])*c[r   r   ra   r   )r^   r   r   ro   r   r   rj   r<   r]   r{   r|   r   rp   s                r2   test_jscode_loops_addfactorr     sg   D1JAq!QCACACACACACACACA AB!Aa!A#a%RSTURU@UXY@Y[\]^[^_`[`ab[befghehijej[jmnopmp[pst[tvwxyvyz{v{~  AB  B  wB  EF  wF	G		  	!Q1*!Q1*-qAqz9QqTJA6M6r1   c                     t        dd      \  } }}}t        d      }t        d      }t        d      }t        d      }t        d|      }t        d	|       }	t        d
|      }
d}d|| z  |z  |	|z  z   |
z   z  dz   }d||z  |
z   z  dz   }d|| z  |	z   z  dz   }t        ||	   |||	f   z  ||
   |||
f   z  z   ||	   ||
   z  |||	|
f   z  z   ||         }|||z   |z   |d d z   k(  s\|||z   |z   |d d z   k(  sJ|||z   |z   |d d z   k(  s8|||z   |z   |d d z   k(  s&|||z   |z   |d d z   k(  s|||z   |z   |d d z   k(  sJ y y y y y y )Nr   Tr_   r   r   rj   r<   r]   r{   r|   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];
ra   rW   r   )r^   r   r   ro   r   r   rj   r<   r]   r{   r|   s0s1s2s3s                  r2    test_jscode_loops_multiple_termsr   *  s	   D1JAq!QCACACACACACACA	 	4 89s1uqs{Q	H			 	,/0sQw	8		 	,/0sQw	8		  		!Qq!tWqtAadG|#ad1Q4i!Q'
&::ad	LAb23B''b23B''b23B''b23B''b23B''b23B'') (
 ( ( ( ( ( (r1   c            	      X   t        t        t        z  t        dt        z   t        dkD  ft        df      t	        t
              g      } t        ddd      }t        | |      dk(  sJ t        d|d   z  t        dkD  f|d   df      t	        |d	         z   |d
   z   }t        |      dk(  sJ t        ddd      }t        ddd      }t        t	        |d	         dt        |d         g|d	   |d   z   |d   dgd|d   z  |d	   z  t        |d
         dz   dgg      }t        ||      dk(  sJ y )Nr:   r   Tr\   r5   r;   zUA[0] = x*y;
if (y > 0) {
   A[1] = x + 2;
}
else {
   A[1] = y;
}
A[2] = Math.sin(z);)r:   r   )r;   r   r   r   z?((x > 0) ? (
   2*A[2]
)
: (
   A[2]
)) + Math.sin(A[1]) + A[0]q   M)r5   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/   r<   r   r   rg   r*   r,   r   r   )matr\   rl   r   r   r   s         r2   test_Matrix_printingr   Z  s\   
!A#y!a%14y93q6B
CCS!QA#q>	   a$iQ'!D'49C$LH1T7RD$<	%& & & 	S!QAS!QAQsVaQsV-	
3!C&!D'1%	
1T71S6	4#<!+Q/1 	2A !Q<		 	 	r1   c                      t        ddd      } t        ddd      }t        ddd      }t        | d         dk(  sJ t        d| d   z        dk(  sJ |d   j                  || |z
        }t        |      d	k(  sJ y )
Nr\   r;   r5   r}   Cr   zA[0]z3*A[0]z
(A - B)[0])r*   r,   subs)r\   r}   r   Fs       r2   test_MatrixElement_printingr     s    S!QAS!QAS!QA!D'?f$%$!ag+(*+*	$QAA!9$%$r1   N)L
sympy.corer   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   r   r   r   r   r    r!   r"   r#   sympy.testing.pytestr$   sympy.printing.jscoder%   sympy.utilities.lambdifyr&   sympy.tensorr'   r(   sympy.matricesr)   r*   r,   r/   r<   rg   r3   r7   r=   r?   rC   rK   rM   rS   rX   rZ   rc   re   rh   rq   rs   ry   r   r   r   r   r   r   r   r   r   r0   r1   r2   <module>r      s   ) ) ) ) )L L L L L ' 7 9 ) / (
'
1a+2$5U-(2'
E +
2-2@ ,.8:-)`%P
&r1   