ó
¡¼™\c           @   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 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	 ƒ \ Z* Z+ Z, d
 „  Z- d „  Z. d „  Z/ d „  Z0 d „  Z1 d „  Z2 d „  Z3 d „  Z4 d „  Z5 d „  Z6 d „  Z7 d „  Z8 d „  Z9 d „  Z: d „  Z; d „  Z< d „  Z= d „  Z> d „  Z? d „  Z@ d „  ZA d „  ZB d  „  ZC d! S("   iÿÿÿÿ(   t   pit   oot   symbolst   Rationalt   Integert   GoldenRatiot
   EulerGammat   Catalant   Lambdat   Dummyt   S(   t	   Piecewiset   sint   cost   Abst   expt   ceilingt   sqrtt   sinht   cosht   tanht   asint   acost   acosht   Maxt   Min(   t   raises(   t   JavascriptCodePrinter(   t   implemented_function(   t   IndexedBaset   Idx(   t   Matrixt   MatrixSymbol(   t   jscodes   x,y,zc           C   s"   t  t t ƒ ƒ d k s t ‚ d  S(   Ns   Math.abs(x)(   R!   R   t   xt   AssertionError(    (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_printmethod   s    c           C   sd   t  t t ƒ ƒ d k s t ‚ t  t d ƒ d k s: t ‚ t  t t d ƒ d ƒ d k s` t ‚ d  S(   Ns   Math.sqrt(x)g      à?i   i   s   Math.cbrt(x)(   R!   R   R"   R#   R
   (    (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_sqrt   s    c          C   s¶   t  d t t d t ƒ ƒ }  t t d ƒ d k s8 t ‚ t t t d ƒ d k sX t ‚ t d |  t ƒ d t t t t d t ƒ d k s– t ‚ t t d	 ƒ d
 k s² t ‚ d  S(   Nt   gi   i   s   Math.pow(x, 3)s   Math.pow(x, Math.pow(y, 3))i   g      @s;   Math.pow(3.5*2*x, -x + Math.pow(y, x))/(Math.pow(x, 2) + y)g      ð¿s   1/x(   R   R   R"   R!   R#   t   y(   R&   (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_Pow   s     /c           C   sk   t  t d ƒ ƒ d k s t ‚ t  t ƒ d k s6 t ‚ t  t ƒ d k sN t ‚ t  t ƒ d k sg t ‚ d  S(   Ni   s   Math.Es   Math.PIs   Number.POSITIVE_INFINITYs   Number.NEGATIVE_INFINITY(   R!   R   R#   R    R   (    (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_constants_mathh#   s    c           C   s   t  d t ƒ d t j d ƒ k s) t ‚ t  d t ƒ d t j d ƒ k sR t ‚ t  d t ƒ d t j d ƒ k s{ t ‚ d  S(   Ni   s#   var GoldenRatio = %s;
2*GoldenRatioi   s   var Catalan = %s;
2*Catalans!   var EulerGamma = %s;
2*EulerGamma(   R!   R   t   evalfR#   R   R   (    (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_constants_other*   s
    &)c           C   sˆ   t  t d d ƒ ƒ d k s! t ‚ t  t d d ƒ ƒ d k sB t ‚ t  t d d ƒ ƒ d k sc t ‚ t  t d	 d ƒ ƒ d k s„ t ‚ d  S(
   Ni   i   s   3/7i   i	   t   2iùÿÿÿs   -3/7iýÿÿÿ(   R!   R   R#   (    (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_Rational2   s    !!!c           C   s@   t  t d ƒ ƒ d k s t ‚ t  t d ƒ ƒ d k s< t ‚ d  S(   NiC   t   67iÿÿÿÿs   -1(   R!   R   R#   (    (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_Integer9   s    c           C   sÒ   t  t t ƒ t t ƒ ƒ d k s( t ‚ t  t t ƒ t t ƒ ƒ d k sP t ‚ t  t t t ƒ t	 t t ƒ ƒ d k s~ t ‚ t  t
 t ƒ t t ƒ ƒ d k s¦ t ‚ t  t t ƒ t t ƒ ƒ d k sÎ t ‚ d  S(   Ns"   Math.pow(Math.sin(x), Math.cos(x))s   Math.sinh(x)*Math.cosh(x)s   Math.max(x, y) + Math.min(x, y)s   Math.tanh(x)*Math.acosh(y)s   -Math.acos(y) + Math.asin(x)(   R!   R   R"   R   R#   R   R   R   R'   R   R   R   R   R   (    (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_functions>   s
    ((.(c          C   s  t  d ƒ }  t d t |  d |  ƒ ƒ } t | |  ƒ ƒ d k sF t ‚ t d t |  d |  t ƒ ƒ } t | |  ƒ ƒ d t j d ƒ k s‘ t ‚ t d ƒ } t d t  d	 d
 t	 ƒƒ } t d t |  |  d |  d |  ƒ ƒ } t | | | ƒ d | | ƒd k st ‚ d  S(   NR"   R&   i   s   2*xs   var Catalan = %s;
2*x/Catalani   t   At   it   nt   integeri   t	   assign_tos@   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   t   True(   R"   R&   R1   R2   (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_inline_functionF   s     +(c           C   s@   t  t t ƒ ƒ d k s t ‚ t  t t ƒ ƒ d k s< t ‚ d  S(   Ns   Math.ceil(x)s   Math.abs(x)(   R!   R   R"   R#   R   (    (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_exceptionsV   s    c           C   sÕ   t  t t @ƒ d k s t ‚ t  t t Bƒ d k s8 t ‚ t  t ƒ d k sQ t ‚ t  t t @t @ƒ d k sq t ‚ t  t t Bt Bƒ d k s‘ t ‚ t  t t @t Bƒ d k s± t ‚ t  t t Bt @ƒ d k sÑ t ‚ d  S(   Ns   x && ys   x || ys   !xs   x && y && zs   x || y || zs   z || x && ys   z && (x || y)(   R!   R"   R'   R#   t   z(    (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_boolean[   s       c             sÁ   t  t t d k  f t d t f ƒ ‰  t ˆ  ƒ }  d } |  | k sI t ‚ t ˆ  d d ƒd k sg t ‚ t  t t d k  f t d t d k f t t ƒ t d k f ƒ ‰  t t ‡  f d †  ƒ d  S(	   Ni   i   s,   ((x < 1) ? (
   x
)
: (
   Math.pow(x, 2)
))R5   t   cs8   if (x < 1) {
   c = x;
}
else {
   c = Math.pow(x, 2);
}i    c              s
   t  ˆ  ƒ S(   N(   R!   (    (   t   expr(    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   <lambda>{   t    (   R   R"   R6   R!   R#   R   R   t
   ValueError(   t   pt   s(    (   R<   s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_Piecewisee   s    %	@c          C   sK   t  d t t t d k  f t d t f ƒ ƒ }  d } |  | k sG t ‚ d  S(   Ni   i   s.   2*((x < 1) ? (
   x
)
: (
   Math.pow(x, 2)
))(   R!   R   R"   R6   R#   (   R@   RA   (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_Piecewise_deep~   s    /	c           C   s   t  t d „  ƒ d  S(   Nc           S   s   t  t t ƒ d d ƒS(   Nt   methodt   garbage(   R!   R   R"   (    (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyR=      R>   (   R   t	   TypeError(    (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_settingsŒ   s    c          C   sU  d d l  m }  m } d d l m } | d d t ƒ\ } } } | d | ƒ | d | ƒ | d | ƒ } } } t ƒ  }	 t ƒ  |	 _ |  d	 ƒ | }
 |	 j	 |
 ƒ d
 k s° t
 ‚ |  d ƒ | | f } |	 j	 | ƒ d | | | k sí t
 ‚ |  d ƒ | | | f } |	 j	 | ƒ d | | | | | | k s9t
 ‚ |	 j t ƒ  k sQt
 ‚ d  S(   Niÿÿÿÿ(   R   R   (   R   s   n m oR4   R2   t   jt   kR"   s   x[j]R1   s   A[%s]t   Bs   B[%s](   t   sympy.tensorR   R   t   sympyR   R6   R   t   sett   _not_ct   _print_IndexedR#   (   R   R   R   R3   t   mt   oR2   RH   RI   R@   R"   R1   RJ   (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_Indexed   s    /	'3c    	      C   sž   t  d d t ƒ\ }  } t d ƒ } t d ƒ } t d ƒ } t d | ƒ } t d |  ƒ } d } t | | | f | | d	 | | ƒ} | | k sš t ‚ d  S(
   Ns   n mR4   R1   R"   R'   R2   RH   sˆ   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];
   }
}R5   (   R   R6   R   R   R!   R#   (	   R3   RP   R1   R"   R'   R2   RH   RA   R;   (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_loops_matrix_vector¢   s    	(c          C   s–   t  d d t d t ƒ\ }  } t d ƒ } t d ƒ } t |  | ƒ }  d i |  j j d 6| j d 6} t | |  d	 | |  ƒ} | | k s’ t ‚ d  S(
   Ns   i mR4   t   clsR"   R'   sl   for (var i_%(icount)i=0; i_%(icount)i<m_%(mcount)i; i_%(icount)i++){
   y[i_%(icount)i] = x[i_%(icount)i];
}t   icountt   mcountR5   (	   R   R6   R	   R   R   t   labelt   dummy_indexR!   R#   (   R2   RP   R"   R'   t   expectedt   code(    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_dummy_loops¸   s    c          C   sà   d d l  m }  m } d d l m } | d d t ƒ\ } } |  d ƒ } |  d ƒ } |  d ƒ } |  d	 ƒ } | d
 | ƒ }	 | d | ƒ }
 d } t | |	 |
 f | |
 | |	 | |	 d | |	 ƒ} | | k sÜ t ‚ d  S(   Niÿÿÿÿ(   R   R   (   R   s   n mR4   R1   R"   R'   R9   R2   RH   s’   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];
   }
}R5   (   RK   R   R   RL   R   R6   R!   R#   (   R   R   R   R3   RP   R1   R"   R'   R9   R2   RH   RA   R;   (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_loops_addÇ   s    	8c          C   s=  d d l  m }  m } d d l m } | d d t ƒ\ } } } } |  d ƒ } |  d ƒ } |  d ƒ }	 | d	 | ƒ }
 | d
 | ƒ } | d | ƒ } | d | ƒ } d |
 | | | | | | | | | | | | | | | f d } t | | | | f | |
 | | | f d |	 |
 ƒ} | | k s9t ‚ d  S(   Niÿÿÿÿ(   R   R   (   R   s   n m o pR4   t   at   bR'   R2   RH   RI   t   lsÅ   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];
s            }
      }
   }
}R5   (   RK   R   R   RL   R   R6   R!   R#   (   R   R   R   R3   RP   RQ   R@   R]   R^   R'   R2   RH   RI   R_   RA   R;   (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt'   test_jscode_loops_multiple_contractionsà   s    B7c          C   s„  d d l  m }  m } d d l m } | d d t ƒ\ } } } } |  d ƒ } |  d ƒ } |  d ƒ }	 |  d	 ƒ }
 | d
 | ƒ } | d | ƒ } | d | ƒ } | d | ƒ } d | | | | | | | | | | | | | | | | | | | | | | | | | | f d } t | | | | | f | | | | | f |	 | | | f d |
 | ƒ}	 |	 | k s€t ‚ d  S(   Niÿÿÿÿ(   R   R   (   R   s   n m o pR4   R]   R^   R;   R'   R2   RH   RI   R_   sÏ   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];
s            }
      }
   }
}R5   (   RK   R   R   RL   R   R6   R!   R#   (   R   R   R   R3   RP   RQ   R@   R]   R^   R;   R'   R2   RH   RI   R_   RA   (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_jscode_loops_addfactorþ   s     iKc          C   s  d d l  m }  m } d d l m } | d d t ƒ\ } } } } |  d ƒ } |  d ƒ } |  d ƒ }	 |  d	 ƒ }
 | d
 | ƒ } | d | ƒ } | d | ƒ } d } d | | | | | | d } d | | | d } d | | | d } t | | | | | f | | | | | f | | | | |	 | | | f d |
 | ƒ}	 |	 | | | | d  k s|	 | | | | d  k s|	 | | | | d  k s|	 | | | | d  k s|	 | | | | d  k s|	 | | | | d  k st ‚ d  S(   Niÿÿÿÿ(   R   R   (   R   s   n m o pR4   R]   R^   R;   R'   R2   RH   RI   s(   for (var i=0; i<m; i++){
   y[i] = 0;
}
s|   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];
s         }
   }
}
sU   for (var i=0; i<m; i++){
   for (var k=0; k<o; k++){
      y[i] = a[%s]*b[k] + y[i];
s      }
}
sU   for (var i=0; i<m; i++){
   for (var j=0; j<n; j++){
      y[i] = a[%s]*b[j] + y[i];
R5   (   RK   R   R   RL   R   R6   R!   R#   (   R   R   R   R3   RP   RQ   R@   R]   R^   R;   R'   R2   RH   RI   t   s0t   s1t   s2t   s3(    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt    test_jscode_loops_multiple_terms  s8    \c          C   s{  t  t t t d t t d k f t t f ƒ t t ƒ g ƒ }  t d d d ƒ } t |  | ƒ d k sk t	 ‚ t d | d t d k f | d t 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 swt	 ‚ d  S(   Ni   i    R1   i   i   sU   A[0] = x*y;
if (y > 0) {
   A[1] = x + 2;
}
else {
   A[1] = y;
}
A[2] = Math.sin(z);s?   ((x > 0) ? (
   2*A[2]
)
: (
   A[2]
)) + Math.sin(A[1]) + A[0]t   qi   t   Mi   sœ   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;(   i   i    (   i   i    (   i   i    (   i    i    (   i   i    (   i   i    (   i   i    (   i   i    (   i   i    (   i   i    (   i   i    (   i    i    (   R   R"   R'   R   R6   R   R9   R    R!   R#   R   R   (   t   matR1   R<   Rg   Rh   RP   (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_Matrix_printingO  s    >	C	#3c          C   s¨   t  d d d ƒ }  t  d d d ƒ } t  d d d ƒ } t |  d
 ƒ d k sR t ‚ t d |  d ƒ d k sr t ‚ | d j | |  | ƒ } t | ƒ d	 k s¤ t ‚ d  S(   NR1   i   i   RJ   t   Ci    s   A[0]s   3*A[0]s
   (A - B)[0](   i    i    (   i    i    (   i    i    (   R    R!   R#   t   subs(   R1   RJ   Rk   t   F(    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   test_MatrixElement_printingw  s     N(D   t
   sympy.coreR    R   R   R   R   R   R   R   R   R	   R
   t   sympy.functionsR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t   sympy.utilities.pytestR   t   sympy.printing.jscodeR   t   sympy.utilities.lambdifyR   RK   R   R   t   sympy.matricesR   R    RL   R!   R"   R'   R9   R$   R%   R(   R)   R+   R-   R/   R0   R7   R8   R:   RB   RC   RG   RR   RS   R[   R\   R`   Ra   Rf   Rj   Rn   (    (    (    s?   lib/python2.7/site-packages/sympy/printing/tests/test_jscode.pyt   <module>   s>   Ld												
										2	(