ó
¡¼™\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 m Z d  d l 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 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 „  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! S("   iÿÿÿÿ(   t   St   pit   oot   symbolst   Rationalt   Integert   GoldenRatiot
   EulerGammat   Catalant   Lambdat   Dummyt   Eq(	   t	   Piecewiset   sint   cost   Abst   expt   ceilingt   sqrtt   gammat   sign(   t   ITE(   t   raises(   t   RustCodePrinter(   t   implemented_function(   t   IndexedBaset   Idx(   t   Matrixt   MatrixSymbol(   t	   rust_codes   x,y,zc           C   s@   t  t d ƒ ƒ d k s t ‚ t  t d ƒ ƒ d k s< t ‚ d  S(   Ni*   t   42iÈÿÿÿs   -56(   R   R   t   AssertionError(    (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_Integer   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 ‚ t  t t d d ƒ ƒ d
 k s© t ‚ t  t d d ƒ t ƒ d k sÎ t ‚ d  S(   Ni   i   s	   3_f64/7.0i   i	   t   2iùÿÿÿs
   -3_f64/7.0iýÿÿÿs   x + 3_f64/7.0s   (3_f64/7.0)*x(   R   R   R   t   x(    (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_Rational   s    !!!!%c           C   s   t  t t ƒ d k s t ‚ t  t t ƒ d k s8 t ‚ t  t t ƒ d k sT t ‚ t  t t ƒ d k sp t ‚ t  t ƒ d k s‰ t ‚ d  S(   Ns   x + ys   x - ys   x*ys   x/ys   -x(   R   R"   t   yR   (    (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_basic_ops   s
    c          C   s8   d t  f d „  ƒ  Y}  t |  t ƒ ƒ d k s4 t ‚ d  S(   Nt   fabsc           B   s   e  Z d  „  Z RS(   c         S   s   d | j  |  j d ƒ S(   Ns	   %s.fabs()i    (   t   _printt   args(   t   selft   printer(    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt
   _rust_code)   s    (   t   __name__t
   __module__R+   (    (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyR&   (   s   s   x.fabs()(   R   R   R"   R   (   R&   (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_printmethod'   s    c           C   sh   t  t t ƒ t t ƒ ƒ d k s( t ‚ t  t t ƒ ƒ d k sF t ‚ t  t t ƒ ƒ d k sd t ‚ d  S(   Ns   x.sin().powf(x.cos())s   x.abs()s   x.ceil()(   R   R   R"   R   R   t   absR   (    (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_Functions.   s    (c          C   s  t  d t ƒ d k s t ‚ t  t d ƒ t  t d ƒ k oG d k n sR t ‚ t  t t ƒ ƒ d k sp t ‚ t  t t j ƒ t  t d ƒ k ož d k n s© t ‚ t  d t t ƒ ƒ d k sË t ‚ t  t t j ƒ t  t d ƒ k oú d k n st ‚ t  d t ƒ d	 k s!t ‚ t  t d ƒ t  t d ƒ k oLd	 k n sWt ‚ t  t d ƒ d
 k sst ‚ t  t t d d ƒ ƒ d k s˜t ‚ t  d t ƒ d k s´t ‚ t  t t ƒ ƒ d k sÒt ‚ t  t d ƒ d k sît ‚ t  t t	 d ƒ d k st ‚ t  t t d d ƒ ƒ d k s3t ‚ t
 d t t d t ƒ ƒ }  t  d |  t ƒ d t t	 t t d t	 ƒ d k st ‚ d „  d d f d „  d d f g } t  t d d i | d 6ƒd k sÚt ‚ t  t d d i | d 6ƒd k st ‚ d  S(   Ni   s	   x.recip()iÿÿÿÿg      ð¿s   x.sqrt()g      à?s   x.sqrt().recip()g      à¿s
   PI.recip()s   PI.sqrt().recip()i   s   x.cbrt()i   s   x.exp2()s   x.exp()s	   x.powi(3)s   x.powf(y.powi(3))s   x.powf(2_f64/3.0)t   gg      @s.   (3.5*2*x).powf(-x + y.powf(x))/(x.powi(2) + y)c         S   s   | j  S(   N(   t
   is_integer(   t   baseR   (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   <lambda>K   t    t   dpowic         S   s   | j  S(   N(   R2   (   R3   R   (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyR4   L   R5   t   powt   user_functionst   Pows
   x.dpowi(3)gš™™™™™	@s
   x.pow(3.2)(   R   R"   R   R   R    t   HalfR   R   R   R$   R   R	   (   R1   t   _cond_cfunc(    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_Pow4   s,    69":6% %/)c           C   s×   t  t ƒ d k s t ‚ t  t ƒ d k s0 t ‚ t  t j ƒ d k sK t ‚ t  t ƒ d k sd t ‚ t  t j ƒ d k s t ‚ t  t j ƒ d k sš t ‚ t  t d ƒ ƒ d k s¸ t ‚ t  t j	 ƒ d k sÓ t ‚ d  S(   Nt   PIt   INFINITYt   NEG_INFINITYt   NANi   t   E(
   R   R   R   R   R    t   Infinityt   NegativeInfinityt   NaNR   t   Exp1(    (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_constantsQ   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*   const GoldenRatio: f64 = %s;
2*GoldenRatioi   s"   const Catalan: f64 = %s;
2*Catalans(   const EulerGamma: f64 = %s;
2*EulerGamma(   R   R   t   evalfR   R   R   (    (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_constants_other\   s    )&c           C   s;  t  t ƒ d k s t ‚ t  t j ƒ d k s3 t ‚ t  t ƒ d k sK t ‚ t  t j ƒ d k sf t ‚ 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 s× 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 s7t ‚ d  S(
   Nt   truet   falses   x && ys   x || ys   !xs   x && y && zs   x || y || zs   z || x && ys   z && (x || y)(
   R   t   TrueR   R    RI   t   FalseRJ   R"   R$   t   z(    (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_booleanc   s       c              s)  t  t t d k  f t d t f ƒ ‰  t ˆ  ƒ d k s= t ‚ t ˆ  d d ƒd k s[ t ‚ t ˆ  d d d t ƒd k s t ‚ t  t t d k  f t d t d	 k  f t d t f ƒ ‰  t ˆ  d t ƒd
 k sÕ t ‚ t ˆ  d d d t ƒd k sù t ‚ t ˆ  d d ƒd k st ‚ d t  t t d k  f t d t d	 k  f t d t f ƒ ‰  t ˆ  d t ƒd k sqt ‚ d t  t t d k  f t d t d	 k  f t d t f ƒ d ‰  t ˆ  d t ƒd k sÏ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'   if (x < 1) {
    x
} else {
    x + 2
}t	   assign_tot   rs,   r = if (x < 1) {
    x
} else {
    x + 2
};t   inlines$   r = if (x < 1) { x } else { x + 2 };i   s9   if (x < 1) { x } else if (x < 5) { x + 1 } else { x + 2 }s>   r = if (x < 1) { x } else if (x < 5) { x + 1 } else { x + 2 };sJ   r = if (x < 1) {
    x
} else if (x < 5) {
    x + 1
} else {
    x + 2
};s;   2*if (x < 1) { x } else if (x < 5) { x + 1 } else { x + 2 }i*   s@   2*if (x < 1) { x } else if (x < 5) { x + 1 } else { x + 2 } - 42i    c              s
   t  ˆ  ƒ S(   N(   R   (    (   t   expr(    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyR4   –   R5   (   R   R"   RK   R   R   R   R   t
   ValueError(    (    (   RR   s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_Piecewiseq   s,    %	8<@@c          C   s=   t  t t t ƒ t }  t |  d t g ƒd k s9 t ‚ d  S(   Nt   dereferences   x + y + (*z) + (*z).sin()(   R"   R$   R   RM   R   R   (   RR   (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_dereference_printing™   s    c          C   s¾   t  t ƒ t }  t |  ƒ d k s( t ‚ t |  d d ƒd k sF t ‚ t  t t ƒ d }  t |  ƒ d k sr t ‚ t |  d d ƒd k s t ‚ t  t t ƒ ƒ }  t |  ƒ d k sº t ‚ d  S(	   Ns   y*x.signum()RO   RP   s   r = y*x.signum();i*   s   (x + y).signum() + 42s   r = (x + y).signum() + 42;s   x.cos().signum()(   R   R"   R$   R   R   R   (   RR   (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt	   test_signž   s    c          C   sœ   t  d ƒ \ }  } t | ƒ } t | ƒ d k s6 t ‚ t | d | g ƒd k sW t ‚ t | d d ƒd k su t ‚ t t ƒ  t | d t ƒWd  QXd  S(	   Ns   x ifs	   if_.sin()RU   s   (*if_).sin()t   reserved_word_suffixt   _unreserveds   if_unreserved.sin()t   error_on_reserved(   R   R   R   R   R   RS   RK   (   R"   R$   RR   (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_reserved_words«   s    !c          C   s4   t  t d k  t t ƒ }  t |  ƒ d k s0 t ‚ d  S(   Ni   s#   if (x < 1) {
    y
} else {
    z
}(   R   R"   R$   RM   R   R   (   RR   (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_ITE¸   s    	c          C   sû   d d l  m }  m } d d l m } | d d t ƒ\ } } } | d | ƒ | d | ƒ | d | ƒ } } } |  d	 ƒ | }	 t |	 ƒ d
 k s˜ t ‚ |  d ƒ | | f }
 t |
 ƒ d k sÆ t ‚ |  d ƒ | | | f } t | ƒ d k s÷ t ‚ d  S(   Niÿÿÿÿ(   R   R   (   R   s   n m ot   integert   it   jt   kR"   s   x[j]t   As
   A[m*i + j]t   Bs   B[m*o*i + o*j + k](   t   sympy.tensorR   R   t   sympyR   RK   R   R   (   R   R   R   t   nt   mt   oR^   R_   R`   R"   Ra   Rb   (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_IndexedÂ   s    /c          C   so   t  d d t d t ƒ\ }  } t d ƒ } t d ƒ } t |  | ƒ }  t | |  d | |  ƒd k sk t ‚ d  S(   Ns   i mR]   t   clsR"   R$   RO   s"   for i in 0..m {
    y[i] = x[i];
}(   R   RK   R
   R   R   R   R   (   R^   Rf   R"   R$   (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.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 | ƒ }
 t | |	 |
 f | |
 d | |	 ƒd k sÀ t ‚ t | |	 |
 f | |
 | |	 | |	 d | |	 ƒd k st ‚ d  S(   Niÿÿÿÿ(   R   R   (   R   s   m nR]   Ra   R"   R$   RM   R^   R_   RO   sr   for i in 0..m {
    y[i] = 0;
}
for i in 0..m {
    for j in 0..n {
        y[i] = A[n*i + j]*x[j] + y[i];
    }
}s|   for i in 0..m {
    y[i] = x[i] + z[i];
}
for i in 0..m {
    for j in 0..n {
        y[i] = A[n*i + j]*x[j] + y[i];
    }
}(   Rc   R   R   Rd   R   RK   R   R   (   R   R   R   Rf   Re   Ra   R"   R$   RM   R^   R_   (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt
   test_loopsÞ   s    %	5c          C   s1  d d l  m }  m } d d l m } | d d t ƒ\ } } } } |  d ƒ } |  d ƒ } |  d ƒ }	 | d	 | ƒ }
 | d
 | ƒ } | d | ƒ } | d | ƒ } t | | | | f | |
 | | | f d |	 |
 ƒd |
 | | | | | | | | | | | | | | | f d k s-t ‚ d  S(   Niÿÿÿÿ(   R   R   (   R   s   n m o pR]   t   at   bR$   R^   R_   R`   t   lRO   s£   for i in 0..m {
    y[i] = 0;
}
for i in 0..m {
    for j in 0..n {
        for k in 0..o {
            for l in 0..p {
                y[i] = a[%s]*b[%s] + y[i];
s               }
        }
    }
}(   Rc   R   R   Rd   R   RK   R   R   (   R   R   R   Re   Rf   Rg   t   pRl   Rm   R$   R^   R_   R`   Rn   (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt    test_loops_multiple_contractionsþ   s    4Bc          C   s~  d d l  m }  m } d d l m } | d d t ƒ\ } } } } |  d ƒ } |  d ƒ } |  d ƒ }	 |  d	 ƒ }
 | d
 | ƒ } | d | ƒ } | d | ƒ } | d | ƒ } t | | | | | f | | | | | f |	 | | | f d |
 | ƒ} | d | | | | | | | | | | | | | | | | | | | | | | | | | | f d k szt ‚ d  S(   Niÿÿÿÿ(   R   R   (   R   s   m n o pR]   Rl   Rm   t   cR$   R^   R_   R`   Rn   RO   s­   for i in 0..m {
    y[i] = 0;
}
for i in 0..m {
    for j in 0..n {
        for k in 0..o {
            for l in 0..p {
                y[i] = (a[%s] + b[%s])*c[%s] + y[i];
s               }
        }
    }
}(   Rc   R   R   Rd   R   RK   R   R   (   R   R   R   Rf   Re   Rg   Ro   Rl   Rm   Rq   R$   R^   R_   R`   Rn   t   code(    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_loops_addfactor  s     Ki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_rust.pyR4   7  R5   (   R   t	   TypeError(    (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_settings6  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"   R1   i   s   2*xs$   const Catalan: f64 = %s;
2*x/Catalani   Ra   R^   Re   R]   i   RO   s8   for i in 0..n {
    A[i] = (A[i] + 1)*(A[i] + 2)*A[i];
}(
   R   R   R	   R   R   R   RG   R   R   RK   (   R"   R1   Ra   R^   (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_inline_function:  s     (c          C   sÆ   t  d d t ƒ}  t  d d t ƒ} i d d 6d „  d d f d	 „  d
 d f g d 6} t t |  ƒ d | ƒd k sz t ‚ t t |  ƒ d | ƒd k sž t ‚ t t | ƒ d | ƒd k sÂ t ‚ d  S(   NR"   R]   Re   t   ceilR   c         S   s   |  j  S(   N(   R2   (   R"   (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyR4   Q  R5   R&   i   c         S   s   |  j  S(   N(   R2   (   R"   (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyR4   Q  R5   R/   R   R8   s   x.ceil()s   fabs(x)s   abs(n)(   R   RL   RK   R   R   R   R   (   R"   Re   t   custom_functions(    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   test_user_functionsL  s    ($$N(@   t
   sympy.coreR    R   R   R   R   R   R   R   R   R	   R
   R   t   sympy.functionsR   R   R   R   R   R   R   R   R   t   sympy.logicR   t   sympy.utilities.pytestR   t   sympy.printing.rustR   t   sympy.utilities.lambdifyR   Rc   R   R   t   sympy.matricesR   R   Rd   R   R"   R$   RM   R    R#   R%   R.   R0   R<   RF   RH   RN   RT   RV   RW   R[   R\   Rh   Rj   Rk   Rp   Rs   Rw   Rx   R{   (    (    (    s=   lib/python2.7/site-packages/sympy/printing/tests/test_rust.pyt   <module>   s>   R@											(				
			 				