ó
¡¼™\c           @   sõ  d  d l  Z  d  d l m Z d  d l 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 d  d l 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 e d	 ƒ Z Z e d
 d d ƒ Z e d d d ƒ Z e d d d ƒ Z e d d d ƒ Z  e d ƒ \ Z! Z" Z# Z$ e d k	 r»g  e& d d d ƒ D], Z' g  e& e' e' d ƒ D] Z( e( ^ qy^ q_Z) e j* e) ƒ Z+ e	 e) ƒ Z, e j- ƒ  Z. n  d „  Z/ d „  Z0 d „  Z1 d „  Z2 d „  Z3 d „  Z4 d S(   iÿÿÿÿN(   t   TensorflowPrinter(   t   tensorflow_code(   t   eyet   symbolst   MatrixSymbolt   Symbolt   MatrixR   t   sint   expt   Functiont
   Derivativet   Trace(   t   CodegenArrayContractiont   CodegenArrayTensorProductt   CodegenArrayElementwiseAddt   CodegenArrayPermuteDimst   CodegenArrayDiagonal(   t   lambdify(   t   skip(   t   import_modulet
   tensorflowt   Mi   t   Nt   Pt   Qs   x y z ti    i	   c   
   
   C   s  t  |  | d ƒ } g  |  D]^ } t g  t | j d ƒ D]8 } g  t | j d ƒ D] } t j d d ƒ ^ qP ^ q6 ƒ ^ q } g  | D] } t t | ƒ ƒ ^ q„ } t j	 | | Œ  ƒ } | j
 d „  t |  | ƒ Dƒ ƒ j ƒ  }	 |	 j r÷ |	 j ƒ  }	 n  | |	 k j ƒ  st ‚ d  S(   NR   i    i   i
   c         S   s   i  |  ] \ } } | | “ q S(    (    (   t   .0t   kt   v(    (    sC   lib/python2.7/site-packages/sympy/printing/tests/test_tensorflow.pys
   <dictcomp>&   s   	 (   R   R   t   ranget   shapet   randomt   randintt   evalR   t   sessiont   runt   subst   zipt   doitt	   is_Matrixt   tolistt   allt   AssertionError(
   t	   variablest   exprt   ft   it   jR   t   random_matricest   random_variablest   rt   e(    (    sC   lib/python2.7/site-packages/sympy/printing/tests/test_tensorflow.pyt   _compare_tensorflow_matrix   s    h"(	c          C   sê  t  s t d ƒ n  t t d ƒ ƒ d k s1 t ‚ t t t t ƒ g t	 t
 ƒ t g g ƒ }  t |  ƒ d k st t ‚ t }  t |  ƒ d k s’ t ‚ t t f |  ƒ t t }  t |  ƒ d k sÄ t ‚ t t t f |  ƒ t t }  t |  ƒ d k sù t ‚ t t t f |  ƒ t t t t }  t |  ƒ d k s6t ‚ t t t t t f |  ƒ t d }  t |  ƒ d	 k sqt ‚ t t f |  ƒ t j }  t |  ƒ d
 k s¢t ‚ t t f |  ƒ t t ƒ }  t |  ƒ d k sÖt ‚ t t f |  ƒ d  S(   Ns   TensorFlow not installedi   s6   tensorflow.constant([[1, 0, 0], [0, 1, 0], [0, 0, 1]])sF   tensorflow.Variable([[x, tensorflow.sin(y)], [tensorflow.exp(z), -t]])R   s   tensorflow.add(M, N)s   tensorflow.matmul(M, N)sC   tensorflow.matmul(tensorflow.matmul(tensorflow.matmul(M, N), P), Q)s-   tensorflow.matmul(tensorflow.matmul(M, M), M)s   tensorflow.matrix_transpose(M)s   tensorflow.trace(M)(   t   tfR   R   R   R)   R   t   xR   t   yR   t   zt   tR   R3   R   R   R   t   TR   (   R+   (    (    sC   lib/python2.7/site-packages/sympy/printing/tests/test_tensorflow.pyt   test_tensorflow_matrix,   s4    +


	c    	      C   sÿ   t  s t d ƒ n  t  j ƒ  }  t d d d ƒ } t d d d ƒ } t j | | ƒ } t | | f | d ƒ } t  j d d g d d g g ƒ } t  j d d	 g d
 d g g ƒ } |  j | | | ƒ ƒ } |  j t  j	 | | ƒ ƒ } | | k j
 ƒ  sû t ‚ d  S(   Ns   TensorFlow not installedR   i   R   R   i   i   i   iþÿÿÿiÿÿÿÿ(   R4   R   t   SessionR   R   t   from_MatMulR   t   constantR"   t   matmulR(   R)   (	   R!   R   R   t   cgR,   t   mat   mbR6   t   c(    (    sC   lib/python2.7/site-packages/sympy/printing/tests/test_tensorflow.pyt   test_codegen_einsumR   s    !!c          C   s   t  s t d ƒ n  t  j ƒ  }  t d d d ƒ } t d d d ƒ } t d d d ƒ } t d d d ƒ } t  j d d g d d	 g g ƒ } t  j d d
 g d d g g ƒ } t  j d d g d d g g ƒ } t  j d d g d	 d g g ƒ } t | | ƒ }	 t |	 ƒ d k st ‚ t | | f |	 d ƒ }
 |  j	 |
 | | ƒ ƒ } |  j	 t  j
 d | | ƒ ƒ } | | k j ƒ  sxt ‚ t | | ƒ }	 t |	 ƒ d k sŸt ‚ t | | f |	 d ƒ }
 |  j	 |
 | | ƒ ƒ } |  j	 | | ƒ } | | k j ƒ  sút ‚ t | | | ƒ }	 t |	 ƒ d k s$t ‚ t | | | f |	 d ƒ }
 |  j	 |
 | | | ƒ ƒ } |  j	 | | | ƒ } | | k j ƒ  s‰t ‚ t | | | | ƒ }	 t |	 ƒ d k s¶t ‚ t | | | | f |	 d ƒ }
 |  j	 |
 | | | | ƒ ƒ } |  j	 | | | | ƒ } | | k j ƒ  s%t ‚ t | d d g ƒ }	 t |	 ƒ d k sRt ‚ t | f |	 d ƒ }
 |  j	 |
 | ƒ ƒ } |  j	 t  j | ƒ ƒ } | | k j ƒ  s¬t ‚ t t | | ƒ d d d d g ƒ }	 t |	 ƒ d k sèt ‚ t | | f |	 d ƒ }
 |  j	 |
 | | ƒ ƒ } |  j	 t  j t  j
 d | | ƒ d d d d g ƒ ƒ } | | k j ƒ  sft ‚ t t | | ƒ d ƒ }	 t |	 ƒ d k s–t ‚ t | | f |	 d ƒ }
 |  j	 |
 | | ƒ ƒ } |  j	 t  j
 d | | ƒ ƒ } | | k j ƒ  süt ‚ d  S(   Ns   TensorFlow not installedR   i   R   R   R   i   i   i   iþÿÿÿiÿÿÿÿi    i   s    tensorflow.einsum("ab,cd", M, N)R   s   ij,kls   tensorflow.add(M, N)s'   tensorflow.add(tensorflow.add(M, N), P)s:   tensorflow.add(tensorflow.add(tensorflow.add(M, N), P), Q)s   tensorflow.transpose(M, [1, 0])sD   tensorflow.transpose(tensorflow.einsum("ab,cd", M, N), [1, 2, 3, 0])s   ab,cds%   tensorflow.einsum("ab,bc->acb", M, N)s
   ab,bc->acb(   i   i   (   R4   R   R;   R   R=   R   R   R)   R   R"   t   einsumR(   R   R   t	   transposeR   (   R!   R   R   R   R   R@   RA   t   mct   mdR?   R,   R6   RB   (    (    sC   lib/python2.7/site-packages/sympy/printing/tests/test_tensorflow.pyt   test_codegen_extrae   sj    !!!!$6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(   Nt   Ai   i   t   Bt   Ci    s   A[0, 0]s	   3*A[0, 0]s!   (tensorflow.add((-1)*B, A))[0, 0](   i    i    (   i    i    (   i    i    (   R   R   R)   R#   (   RI   RJ   RK   t   F(    (    sC   lib/python2.7/site-packages/sympy/printing/tests/test_tensorflow.pyt   test_MatrixElement_printing¦   s     c          C   s=   t  d ƒ }  t t t ƒ t ƒ } t | ƒ d k s9 t ‚ d  S(   NR,   s-   tensorflow.gradients(tensorflow.sin(x), x)[0](   R	   R
   R   R5   R   R)   (   R,   R+   (    (    sC   lib/python2.7/site-packages/sympy/printing/tests/test_tensorflow.pyt   test_tensorflow_Derivative²   s    (5   R   t   sympy.printing.tensorflowR    R   t   sympyR   R   R   R   R   R   R   R	   R
   R   t   sympy.codegen.array_utilsR   R   R   R   R   t   sympy.utilities.lambdifyR   t   sympy.utilities.pytestR   t   sympy.externalR   R4   R   R   R   R   R   R5   R6   R7   R8   t   NoneR   R-   R.   t   lloR=   t   m3x3t	   m3x3sympyR;   R!   R3   R:   RC   RH   RM   RN   (    (    (    sC   lib/python2.7/site-packages/sympy/printing/tests/test_tensorflow.pyt   <module>   s0   L(E		&		A	