
    gi,                        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" 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                  T    t          t          t                              dk    sJ d S )NMath.abs(x))r,   r   x     \/var/www/html/ai-engine/env/lib/python3.11/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 d S )NzMath.sqrt(x)g      ?   zMath.cbrt(x))r,   r   r/   r   Oner0   r1   r2   test_jscode_sqrtr7      sc    $q''??n,,,,!S&>>^++++!aeAg,>111111r1   c                     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 d S )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..11A!Q$<<+++++!ad) =====!QQqTT#XQT**AqD1H566EF 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 d S )Nr;   zMath.EzMath.PIzNumber.POSITIVE_INFINITYzNumber.NEGATIVE_INFINITY)r,   r   r   r   r0   r1   r2   test_jscode_constants_mathhr?   $   sn    #a&&>>X%%%%"::"""""::333332#;;4444444r1   c                  2   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 d S )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    	+ @;CTUWCXCXXY Y Y Y!G) >rARAR RRRRR	* =
@PQS@T@TTU U U 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 d S )
Nr5      z3/7   	   2z-3/7)r,   r   r0   r1   r2   test_jscode_RationalrK   3   s    (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 d S )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                  l   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 d S )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3#aQ--  $IIIIIWt,,,FB#b"++)++++#b"q&//""o5555#b"u---..-????3r2;;,<////!CBKK-  M111111r1   c                      t          t          d                    dk    sJ t          t          d                    dk    sJ d S )NC   67z-1)r,   r   r0   r1   r2   test_jscode_IntegerrX   N   sF    '"++$&&&&'"++$&&&&&&r1   c                  v   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 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<   r#   r   r!   r   r    r0   r1   r2   test_jscode_functionsrZ   S   s    #a&&CFF"##'KKKKK$q''DGG#$$(CCCCC#a))c!Qii'((,MMMMM$q''%(("##'CCCCC$q''$q''/""&DDDDDDDr1   c            	      b   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 d S )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..11A!!A$$<<5    S&AaCK"8"899A!!A$$<<;gmB>O>OOOOOOCACd+++,,AS&Aq1uIq1u,=">">??A!!AaD''QqT***	     r1   c                      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   r0   r1   r2   test_jscode_exceptionsre   k   sD    '!**////#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 d S )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1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k    ft          t                    t          dk    f          t	          t
          fd	           d S )
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  6666$#&&&	 	 	 	 aQZ!Q$AQQ@@D
:++++,,,,,r1   c                      t          dt          t          t          dk     ft          dz  df          z            } d}| |k    sJ d S )Nr:   r;   Tz.2*((x < 1) ? (
   x
)
: (
   Math.pow(x, 2)
)))r,   r   r/   )ro   rp   s     r2   test_jscode_Piecewise_deeprs      sK    qAq1u:1d|44455A  666666r1   c                  2    t          t          d            d S )Nc                  H    t          t          t                    d          S )Ngarbage)method)r,   r   r/   r0   r1   r2   rm   z&test_jscode_settings.<locals>.<lambda>   s    fSVVI>>> r1   )r$   	TypeErrorr0   r1   r2   test_jscode_settingsry      s    
9>>?????r1   c                  d   t          dd          \  } }}t          d|           t          d|          t          d|          }}}t                      }t                      |_        t          d          |         }|                    |          dk    sJ t          d	          ||f         }|                    |          d
||z  |z   z  k    sJ t          d          |||f         }	|                    |	          d||z  |z  ||z  z   |z   z  k    sJ |j        t                      k    sJ d S )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      s5   gt,,,GAq!#qkk3sA;;C!qAAuuAHCAA&((((CAAA'QqSU"33333CAq!AA'QqSU1Q3Yq["999998suur1   c                  ,   t          dd          \  } }t          d          }t          d          }t          d          }t          d|          }t          d|           }d	}t          |||f         ||         z  ||         
          }||k    sJ d S )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666666r1   c                     t          ddt                    \  } }t          d          }t          d          }t          | |          } d| j        j        |j        dz  }t          ||          ||                    }||k    sJ d S )	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222DAqCACAAq		A	 7&!-@@	AH
 !A$!A$'''D8r1   c                  n   t          dd          \  } }t          d          }t          d          }t          d          }t          d          }t          d|          }t          d	|           }d
}t          |||f         ||         z  ||         z   ||         z   ||                   }	|	|k    sJ d S )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666666r1   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 d S )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111JAq!QCACACACACACACAA 78c!eAg!Ao!6Ka6O6O6OQRSTQTUVQVYZ[\Y\Q\_`Q`Q`Q`	b		  	qAqz!Aq!QJ-'1Q4888A666666r1   c                  V   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 d S )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     s   D111JAq!QCACACACACACACACAA AB!Aa!A#a%RSTURU@UXY@Y@Y@Y[\]^[^_`[`ab[befghehijej[jmnopmp[pst[t[t[tvwxyvyz{v{~  AB  B  wB  EF  wF  wF  wF	G		  	!Q1*!Q1*-qAqz9QqTJJJA666666r1   c                  T   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    su|||z   |z   |d d         z   k    s`|||z   |z   |d d         z   k    sK|||z   |z   |d d         z   k    s6|||z   |z   |d d         z   k    s!|||z   |z   |d d         z   k    sJ d S d S d S d S d S d S )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   *  sO   D11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 	L 	LAb23B3'''b23B3'''b23B3'''b23B3'''b23B3'''b23B3''''' ('''''''''''r1   c            	      2   t          t          t          z  t          dt          z   t          dk    ft          df          t	          t
                    g          } t          ddd          }t          | |          dk    sJ t          d|d         z  t          dk    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 d S )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993q66B
C
CCS!QA#q>>	    a$iQ'!D'499C$LLH1T7RD$<<	%& & & & 	S!QAS!QAQsVaQsV-	
3!C&!D'1%	
1T71S6	4#<<!+Q/1 	2 	2A !Q<<		 	 	 	 	 	r1   c                  F   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                             || |z
            }t          |          d	k    sJ d S )
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!99$$$$$$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 L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ' ' ' ' ' ' 7 7 7 7 7 7 9 9 9 9 9 9 ) ) ) ) ) ) ) ) / / / / / / / / ( ( ( ( ( (
''

1a+ + +2 2 2$ $ $5 5 5U U U- - -( ( (2 2 2' ' '
E E E   + + +
2 2 2- - -2  @ @ @     ,    .  8  :-) -) -)`% % %P
& 
& 
& 
& 
&r1   