ó
¡¼™\c           @   s?  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 m Z m Z d  d l m Z d  d l m Z m Z d  d l m Z d  d l m Z m Z m Z d  d l m Z d  d	 l m Z d  d
 l m Z d  d l Z e d ƒ \ Z Z  Z! d „  Z" d „  Z# d „  Z$ d „  Z% d „  Z& e d „  ƒ Z' d „  Z( d „  Z) d „  Z* d „  Z+ d „  Z, d „  Z- d „  Z. e 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 S(-   iÿÿÿÿ(	   t   St   symbolst   Eqt   pit   Catalant
   EulerGammat   Lambdat   Dummyt   Function(   t   StringIO(   t   erft   Integralt	   Piecewise(   t   Equality(   t   Matrixt   MatrixSymbol(   t
   Assignment(   t   JuliaCodeGent   codegent   make_routine(   t   raises(   t   implemented_function(   t   XFAILNs   x,y,zc          C   sS   t  ƒ  }  t ƒ  } |  j g  | d d t d t ƒ| j ƒ  } | d k sO t ‚ d  S(   Nt   filet   headert   emptyt    (   R   R	   t   dump_jlt   Falset   getvaluet   AssertionError(   t   code_gent   outputt   source(    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_empty_jl_code   s
    		c          C   sn   d t  t t f }  t |  d d t d t ƒ\ } | d d k sH t ‚ | d } d } | | k sj t ‚ d  S(	   Nt   testt   JuliaR   R   i    s   test.jli   sA   function test(x, y, z)
    out1 = z.*(x + y)
    return out1
end
(   t   xt   yt   zR   R   R   (   t	   name_exprt   resultR!   t   expected(    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_simple_code   s    
c          C   sy   d t  t t f }  t |  d d t d t ƒ\ } | d d k sH t ‚ | d } d t j d	 } | | k su t ‚ d  S(
   NR#   R$   R   R   i    s   test.jli   s   #   Code generated with sympy s   
#
#   See http://www.sympy.org/ for more information.
#
#   This file is part of 'project'
function test(x, y, z)
    out1 = z.*(x + y)
    return out1
end
(	   R%   R&   R'   R   t   TrueR   R   t   sympyt   __version__(   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_simple_code_with_header(   s    

c          C   sc   t  t t t ƒ }  d |  f } t | d d t d t ƒ\ } | d } d } | | k s_ t ‚ d  S(   NR#   R$   R   R   i   s3   function test(x, y)
    z = x + y
    return z
end
(   R   R'   R%   R&   R   R   R   (   t   exprR(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_simple_code_nameout;   s    
c          C   sT   d t  t f }  t |  d d t d t ƒ\ } | d } d } | | k sP t ‚ d  S(   NR#   R$   R   R   i   s:   function test()
    out1 = pi^catalan
    return out1
end
(   R   R   R   R   R   (   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_numbersymbolI   s
    
c       	   C   s`   d t  t t g f }  t |  d d t d t d t ƒ\ } | d } d } | | k s\ t ‚ d  S(   NR#   R$   R   R   t   inlinei   sš   function test()
    Catalan = 0.915965594177219
    EulerGamma = 0.5772156649015329
    out1 = pi^Catalan
    out2 = EulerGamma
    return out1, out2
end
(   R   R   R   R   R   R   (   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_numbersymbol_no_inlineV   s    
c          C   sŠ   t  t }  t d |  d t t  t g d d ƒ} t ƒ  } t ƒ  } | j | g | d d t d t ƒ| j ƒ  } d } | | k s† t	 ‚ d  S(   NR#   t   argument_sequencet   languaget   juliaR   R   s<   function test(z, x, y)
    out1 = x + y
    return out1
end
(
   R%   R&   R   R'   R   R	   R   R   R   R   (   R0   t   routineR   R    R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_code_argument_orderi   s    
$		"c          C   sr   t  t t }  t  t t } d |  | g f } t | d d t d t ƒ\ } | d } d } | | k sn t ‚ d  S(   NR#   R$   R   R   i   s]   function test(x, y, z)
    out1 = z.*(x + y)
    out2 = z.*(x - y)
    return out1, out2
end
(   R%   R&   R'   R   R   R   (   t   expr1t   expr2R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_multiple_results_my   s    
c    
      C   s¯   t  d ƒ \ }  } } t | t t t ƒ } t |  t t t ƒ } t | d t ƒ } d | | | g f } t | d d t d t ƒ\ } | d } d }	 | |	 k s« t ‚ d  S(	   Ns   A,B,Ci   R#   R$   R   R   i   s`   function test(x, y, z)
    C = z.*(x + y)
    A = z.*(x - y)
    B = 2*x
    return C, A, B
end
(   R   R   R%   R&   R'   R   R   R   (
   t   At   Bt   CR:   R;   t   expr3R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_results_named_unorderedŠ   s    
c    
      C   sÙ   t  d ƒ \ }  } } t | t t t ƒ } t |  t t t ƒ } t | d t ƒ } d | | | g f } t | d d t d t d t t t f ƒ} | d d d	 k s¯ t ‚ | d d
 } d }	 | |	 k sÕ t ‚ d  S(   Ns   A,B,Ci   R#   R$   R   R   R5   i    s   test.jli   s`   function test(x, z, y)
    C = z.*(x + y)
    A = z.*(x - y)
    B = 2*x
    return C, A, B
end
(   R   R   R%   R&   R'   R   R   R   (
   R=   R>   R?   R:   R;   R@   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_results_named_orderedž   s    c          C   sé   d d l  m }  m } m } d |  t ƒ | t ƒ | t ƒ d j ƒ  | | | | | | | | t t t ƒ ƒ ƒ ƒ ƒ ƒ ƒ ƒ g f } t | d d t	 d t	 ƒ} | d d d	 k s¿ t
 ‚ | d d
 } d } | | k så t
 ‚ d  S(   Niÿÿÿÿ(   t   sint   cost   tant   testlongi   R$   R   R   i    s   testlong.jli   s>  function testlong(x, y, z)
    out1 = sin(x).^3 + 3*sin(x).^2.*cos(y) + 3*sin(x).^2.*tan(z) + 3*sin(x).*cos(y).^2 + 6*sin(x).*cos(y).*tan(z) + 3*sin(x).*tan(z).^2 + cos(y).^3 + 3*cos(y).^2.*tan(z) + 3*cos(y).*tan(z).^2 + tan(z).^3
    out2 = cos(cos(cos(cos(cos(cos(cos(cos(x + y + z))))))))
    return out1, out2
end
(   R-   RC   RD   RE   R%   R&   R'   t   expandR   R   R   (   RC   RD   RE   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_complicated_jl_codegen³   s    'Dc       	   C   sÌ   d d l  m }  m } m } t d ƒ } d | d t ƒ t t |  t ƒ ƒ | t ƒ t | |  d t ƒ ƒ g f } t | d d t	 d t	 ƒ\ } | d	 d
 k s¦ t
 ‚ | d } d } | | k sÈ t
 ‚ d  S(   Niÿÿÿÿ(   RC   RD   RE   t   at   fooi   R$   R   R   i    s   foo.jli   sv   function foo(x)
    out1 = cos(2*x)
    y = sin(x)
    out3 = cos(x)
    a = sin(2*x)
    return out1, y, out3, a
end
(   R-   RC   RD   RE   R   R%   R   R&   R   R   R   (   RC   RD   RE   RI   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt"   test_jl_output_arg_mixed_unorderedÈ   s    J
c          C   sž   t  d t d k  f t d t d k f t d t d k f d t f d t ƒ}  d |  f } t | d d t d	 t ƒ\ } | d } d
 } | | k sš t ‚ d  S(   Ni    iÿÿÿÿi   i   t   evaluatet   pwtestR$   R   R   sy   function pwtest(x)
    out1 = ((x < -1) ? (0) :
    (x <= 1) ? (x.^2) :
    (x > 1) ? (2 - x) : (1))
    return out1
end
(   R   R%   R,   R   R   R   (   t   pwR(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_piecewise_Ü   s    N
c       	   C   sž   t  d t d k  f t d t d k f t d t d k f d t f ƒ }  d |  f } t | d d t d t d	 t ƒ\ } | d } d
 } | | k sš t ‚ d  S(   Ni    iÿÿÿÿi   i   RM   R$   R   R   R3   s»   function pwtest(x)
    if (x < -1)
        out1 = 0
    elseif (x <= 1)
        out1 = x.^2
    elseif (x > 1)
        out1 = -x + 2
    else
        out1 = 1
    end
    return out1
end
(   R   R%   R,   R   R   R   (   RN   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_piecewise_no_inlineì   s    H
c          C   s“   d d t  d t g f d t d d t g f g }  t |  d d t d t ƒ} | d	 d	 d
 k si t ‚ | d	 d } d } | | k s t ‚ d  S(   NRJ   i   i   t   bari   R$   R   R   i    s   foo.jli   s”   function foo(x, y)
    out1 = 2*x
    out2 = 3*y
    return out1, out2
end
function bar(y)
    out1 = y.^2
    out2 = 4*y
    return out1, out2
end
(   R%   R&   R   R   R   (   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_multifcns_per_file  s    4c          C   sž   d d t  d t g f d t d d t g f g }  t |  d d t d t ƒ} | d	 d	 d
 k si t ‚ | d	 d } d t j d } | | k sš t ‚ d  S(   NRJ   i   i   RQ   i   R$   R   R   i    s   foo.jli   s   #   Code generated with sympy sð   
#
#   See http://www.sympy.org/ for more information.
#
#   This file is part of 'project'
function foo(x, y)
    out1 = 2*x
    out2 = 3*y
    return out1, out2
end
function bar(y)
    out1 = y.^2
    out2 = 4*y
    return out1, out2
end
(   R%   R&   R   R,   R   R   R-   R.   (   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt#   test_jl_multifcns_per_file_w_header  s    4c       	   C   sr   d d t  d t g f d t d d t g f g }  t |  d d d d	 t d
 t ƒ\ } | d d k sn t ‚ d  S(   NRJ   i   i   RQ   i   R$   t   prefixt   bazR   R   i    s   baz.jl(   R%   R&   R   R   R   (   R(   R)   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_filename_match_prefix2  s    4c          C   s    t  t d t t t g g ƒ }  d t t d d d ƒ |  ƒ f } t | d d t d t ƒ} | d	 d	 d
 k sv t	 ‚ | d	 d } d } | | k sœ t	 ‚ d  S(   Ni   R#   t   myout1i   i   R$   R   R   i    s   test.jlsG   function test(x, y, z)
    myout1 = [x 2*y pi*z]
    return myout1
end
(
   R   R%   R&   R   R'   R   R   R   R   R   (   t   e2R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_matrix_named9  s     !c          C   s‘   t  d d d ƒ }  t t d t t t g g ƒ } d t |  | d t ƒf } t | d d t d	 t ƒ\ } | d } d
 } | | k s t	 ‚ d  S(   NRW   i   i   i   R#   RL   R$   R   R   sG   function test(x, y, z)
    myout1 = [x 2*y pi*z]
    return myout1
end
(
   R   R   R%   R&   R   R'   R   R   R   R   (   RW   RX   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_matrix_named_matsymH  s     
c          C   sl   t  t t t d g g ƒ }  d |  f } t | d d t d t ƒ\ } | d } d } | | k sh t ‚ d  S(   Ni   R#   R$   R   R   i   s?   function test(x, y)
    out1 = [x x + y 3]
    return out1
end
(   R   R%   R&   R   R   R   (   R0   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_matrix_output_autonameW  s    
c          C   sÆ   t  t }  t d t  d t d t g g ƒ } t t  g t g t g g ƒ } t t  t g t d g g ƒ } d |  | | | f f } t | d d t d t ƒ\ } | d } d } | | k sÂ t ‚ d  S(	   Ni   i   R#   R$   R   R   i   s˜   function test(x, y, z)
    out1 = x + y
    out2 = [2*x 2*y 2*z]
    out3 = [x, y, z]
    out4 = [x  y;
    z 16]
    return out1, out2, out3, out4
end
(   R%   R&   R   R'   R   R   R   (   t   e1RX   t   e3t   e4R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt    test_jl_matrix_output_autoname_2e  s    
$
	c    
      C   s×   t  d ƒ \ }  } t d d d ƒ } t | t t t ƒ } t | t d d t g g ƒ ƒ } t |  d t ƒ } d | | | g f } t | d d t d	 t d
 t t t f ƒ\ } | d } d }	 | |	 k sÓ t	 ‚ d  S(   Ns   B,CR=   i   i   i   R#   R$   R   R   R5   s]   function test(x, z, y)
    C = z.*(x + y)
    A = [1 2 x]
    B = 2*x
    return C, A, B
end
(
   R   R   R   R%   R&   R'   R   R   R   R   (
   R>   R?   R=   R:   R;   R@   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt$   test_jl_results_matrix_named_orderedz  s    !
c          C   sì   t  d d d ƒ }  t  d d d ƒ } t  d d d ƒ } t  d d d ƒ } d t | |  d	 d  d  … f ƒ t | |  d d  d  … f ƒ t | |  d  d  … d f ƒ g f } t | d
 d t d t ƒ\ } | d } d } | | k sè t ‚ d  S(   NR=   i   i   R>   i   R?   t   DR#   i    R$   R   R   sU   function test(A)
    B = A[1,:]
    C = A[2,:]
    D = A[:,3]
    return B, C, D
end
(   R   R   R   R   R   (   R=   R>   R?   Ra   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_matrixsymbol_slice  s    %
c          C   sÊ   t  d d d ƒ }  t  d d d ƒ } t  d d d ƒ } d t | |  d d … d d … f ƒ t | |  d d … d	 d … f ƒ g f } t | d
 d t d t ƒ\ } | d	 } d } | | k sÆ t ‚ d  S(   NR=   i   i   R>   i   R?   R#   i    i   R$   R   R   sK   function test(A)
    B = A[1:2,1:2]
    C = A[1:2,2:3]
    return B, C
end
(   R   R   R   R   R   (   R=   R>   R?   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_matrixsymbol_slice2¤  s    %+
c       	   C   sÓ   t  d d d ƒ }  t  d d d ƒ } t  d d d ƒ } d t | |  d	 d  … d
 d  d … f ƒ t | |  d  d  d … d  d  d … f ƒ g f } t | d d t d t ƒ\ } | d
 } d } | | k sÏ t ‚ d  S(   NR=   i   i   R>   i   R?   i   R#   i   i   i   R$   R   R   sY   function test(A)
    B = A[7:end,2:3:end]
    C = A[1:2:end,1:3:end]
    return B, C
end
(   R   R   R   R   R   (   R=   R>   R?   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_matrixsymbol_slice3¶  s    (1
c          C   sÉ   t  d d d ƒ }  t  d d d ƒ } d t | |  d d  d  … f ƒ |  d d  d  … f |  d  d  … d f |  d  d  … d f g f } t | d d	 t d
 t ƒ\ } | d } d } | | k sÅ t ‚ d  S(   NR=   i   i   R>   i   R#   i    R$   R   R   sy   function test(A)
    B = A[1,:]
    out2 = A[2,:]
    out3 = A[:,1]
    out4 = A[:,2]
    return B, out2, out3, out4
end
(   R   R   R   R   R   (   R=   R>   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt#   test_jl_matrixsymbol_slice_autonameÈ  s    a
c          C   s  d d l  m }  m } d d l m } | d d t ƒ\ } } |  d ƒ } |  d ƒ } |  d ƒ } | d	 | ƒ } | d
 | ƒ }	 t d t | | | | |	 f | |	 ƒ f d d t d t ƒ\ }
 |
 d } d } | | i d | |	 f d 6k s| | i d | |	 f d 6k st	 ‚ d  S(   Niÿÿÿÿ(   t   IndexedBaset   Idx(   R   s   n mt   integerR=   R%   R&   t   it   jt   mat_vec_multR$   R   R   i   s¹   function mat_vec_mult(y, A, m, n, x)
    for i = 1:m
        y[i] = 0
    end
    for i = 1:m
        for j = 1:n
            y[i] = %(rhs)s + y[i]
        end
    end
    return y
end
s   A[%s,%s].*x[j]t   rhss   x[j].*A[%s,%s](
   t   sympy.tensorRf   Rg   R-   R   R,   R   R   R   R   (   Rf   Rg   R   t   nt   mR=   R%   R&   Ri   Rj   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_loopsÚ  s    1
!c       
   C   s  d d l  m }  m } d d l m } | d d t ƒ\ } } } } |  d ƒ } |  d ƒ } |  d ƒ }	 | d	 | ƒ }
 | d
 | ƒ } | d | ƒ } | d | ƒ } t d t |	 |
 | | | | f | |
 | | | f ƒ f d d t d t ƒ\ } | d } d } | | k st	 ‚ d  S(   Niÿÿÿÿ(   Rf   Rg   (   R   s   n m o pRh   R=   R>   R&   Ri   Rj   t   kt   lt   tensorthingR$   R   R   i   s+  function tensorthing(y, A, B, m, n, o, p)
    for i = 1:m
        y[i] = 0
    end
    for i = 1:m
        for j = 1:n
            for k = 1:o
                for l = 1:p
                    y[i] = A[i,j,k,l].*B[j,k,l] + y[i]
                end
            end
        end
    end
    return y
end
(
   Rm   Rf   Rg   R-   R   R,   R   R   R   R   (   Rf   Rg   R   Rn   Ro   t   ot   pR=   R>   R&   Ri   Rj   Rq   Rr   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt*   test_jl_tensor_loops_multiple_contractionsû  s    :
c          C   sc   t  t t d ƒ }  d |  f } t | d d t d t ƒ\ } | d } d } | | k s_ t ‚ d  S(   Ni   t   mysqrR$   R   R   i   s0   function mysqr(x)
    x = x.^2
    return x
end
(   R   R%   R   R   R   (   R0   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_InOutArgument  s    
c       
   C   sÖ   t  t t d t ƒ }  d |  f } t | d d t d t d t t f ƒ\ } | d } d } | | k so t ‚ t  t t d t ƒ }  d |  f } t | d d t d t ƒ\ } | d } d } | | k sÒ t ‚ d  S(	   Ni   R#   R$   R   R   R5   i   s6   function test(x, y)
    x = x.^2 + y
    return x
end
(   R   R%   R&   R   R   R   (   R0   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_InOutArgument_order,  s    

c          C   st   t  d ƒ }  d |  t ƒ j t ƒ t j g f } t | d d t d t ƒ\ } | d } d } | | k sp t ‚ d  S(   Nt   fR#   R$   R   R   i   s—   function test(x)
    # unsupported: Derivative(f(x), x)
    # unsupported: zoo
    out1 = Derivative(f(x), x)
    out2 = zoo
    return out1, out2
end
(   R   R%   t   diffR    t   ComplexInfinityR   R   R   (   Rz   R(   R)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_jl_not_supportedH  s    $
c          C   s×   t  d ƒ \ }  } } } t d |  | f d d t d t d | f ƒ} | d d } d	 } | | k sl t ‚ t d |  | | f d d t d t d
 |  | f d | | f ƒ} | d d } d } | | k sÓ t ‚ d  S(   Ns   x y z tRz   R$   R   R   t   global_varsi    i   s2   function f(x)
    out1 = x.*y
    return out1
end
R5   s9   function f(x, y)
    out1 = x.*y + z
    return out1
end
(   R   R   R   R   (   R%   R&   R'   t   tR)   R!   R*   (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   test_global_vars_octaveY  s    "&(B   t
   sympy.coreR    R   R   R   R   R   R   R   R   t   sympy.core.compatibilityR	   R-   R
   R   R   R   t   sympy.matricesR   R   t   sympy.printing.codeprinterR   t   sympy.utilities.codegenR   R   R   t   sympy.utilities.pytestR   t   sympy.utilities.lambdifyR   R   R%   R&   R'   R"   R+   R/   R1   R2   R4   R9   R<   RA   RB   RH   RK   RO   RP   RR   RS   RV   RY   RZ   R[   R_   R`   Rb   Rc   Rd   Re   Rp   Rv   Rx   Ry   R}   R€   (    (    (    sG   lib/python2.7/site-packages/sympy/utilities/tests/test_codegen_julia.pyt   <module>   sV   @																									!	#			