ó
~9­\c           @   sÚ  d  d l  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 d  d l  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 m Z m Z d  d l m Z m  Z  e d	 d
 e ƒ\ Z! Z" e d ƒ \ Z# Z$ Z% Z& Z' Z( e d e% e% ƒ Z) e d e% e% ƒ Z* e d e% e% ƒ Z+ e d e% e% ƒ 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 S(   iÿÿÿÿ(   t   symbolst   IndexedBase(   t   CodegenArrayContractiont   CodegenArrayTensorProductt   CodegenArrayDiagonalt   CodegenArrayPermuteDimst   CodegenArrayElementwiseAddt   _codegen_array_parset   _recognize_matrix_expressiont   _RecognizeMatOpt   _RecognizeMatMulLinest   _unfold_recognized_exprt   parse_indexed_expressiont   recognize_matrix_expressiont   _parse_matrix_expression(   t   MatrixSymbolt   Sum(   t   Permutation(   t   KroneckerDelta(   t   MatrixElement(   t   Tracet   MatAddt   MatMult	   Transpose(   t   raisest   XFAILs   A Bt   clss   i j k l m nt   Mt   Nt   Pt   Qc          C   s¶  t  t ƒ }  |  t k s t ‚ t t t t t t d d f ƒ } t | ƒ }  |  t  t t t ƒ d ƒ k sr t ‚ t  t t t ƒ d ƒ }  |  t  t t t ƒ d	 ƒ k s® t ‚ t t	 } t  t t t	 ƒ d
 ƒ } t  j
 | ƒ | k së t ‚ | t t f } t | ƒ | k st ‚ t t	 t } t  t t t	 t ƒ d d ƒ } t  j
 | ƒ | k sZt ‚ | t t f } t  t t t t	 ƒ d d ƒ } t | ƒ }  |  j ƒ  }  |  | k s²t ‚ d  S(   Ni    i   i   i   i   i   (   i    i   (   i   i    (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   R   t   At   AssertionErrorR   t   it   BR   R   R   R   t   from_MatMult   jt   sort_args_by_name(   t   cgt   st   exprt   resultt   elem(    (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyt+   test_codegen_array_contraction_construction   s(    $$$
c          C   s?  t  t t t ƒ d ƒ }  |  j ƒ  } | d d g g k s? t ‚ |  j |  j | ƒ d	 g k sc t ‚ t  t t t ƒ d
 ƒ }  |  j ƒ  } | d d g g k s¢ t ‚ |  j |  j | ƒ d g k sÆ t ‚ t  t t t t ƒ d d ƒ }  |  j ƒ  } | d d g d d g g k st ‚ |  j |  j | ƒ d d g k s;t ‚ d  S(   Ni    i   i   i   i   (   i    i   (   i    i    (   i    i   (   i    i   (   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   t   _get_contraction_tuplesR    t*   _contraction_tuples_to_contraction_indicesR(   (   R&   t   indtup(    (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyt,   test_codegen_array_contraction_indices_types4   s    $$$c          C   s€  t  t t ƒ d ƒ }  t |  ƒ t t ƒ k s3 t ‚ t  t t t ƒ d	 d
 ƒ }  t |  ƒ t t ƒ t t ƒ g k sx t ‚ t  t t t ƒ d d ƒ }  t |  ƒ t t t ƒ k sµ t ‚ t  t t t ƒ d d ƒ }  t |  ƒ t t t j ƒ k sõ t ‚ t t t t	 t
 t f ƒ }  t |  ƒ t t t	 k s3t ‚ t  j t t t	 ƒ }  t |  ƒ t t t	 k sjt ‚ t t t j t	 t
 t f ƒ }  t |  ƒ t t j t	 k s®t ‚ t  j t t j t	 ƒ }  t |  ƒ t t j t	 k sët ‚ t  t t t t	 t ƒ d d ƒ }  t |  ƒ t t t	 t g k s2t ‚ d t t } | t
 t f } t | ƒ }  t |  ƒ d t t k s|t ‚ d  S(   Ni    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   R   R    R   t   TR   R   R!   R$   R#   R   (   R&   R(   R*   (    (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyt-   test_codegen_array_recognize_matrix_mul_linesE   s,    *"%  !##!&c          C   sß  t  t t ƒ }  t  t t ƒ } t  |  | ƒ } | t  t t t t ƒ k sN t ‚ | j t t t t f k so t ‚ t |  d	 ƒ } t | d
 ƒ } t  | | ƒ } | t t  t t t t ƒ d d ƒ k sÉ t ‚ t  t | ƒ } | t t  t t t ƒ d ƒ k sÿ t ‚ t | d ƒ } | t t  t t ƒ d d ƒ k s5t ‚ t t  | | ƒ d ƒ } | t t  t t t t ƒ d d d ƒ k s}t ‚ t t  t t t t ƒ d d ƒ } t | d ƒ } | t t  t t t t ƒ d d d ƒ k sÝt ‚ t | d d ƒ } | t t  t t t t ƒ d d d d  ƒ k s"t ‚ t t  t t t t ƒ d! d" ƒ } t | d# ƒ } | t t  t t t t ƒ d$ d% d& ƒ k s‚t ‚ t | d' d( ƒ } | t t  t t t t ƒ d) d* d+ d, ƒ k sÇt ‚ t |  d- ƒ } t | d. ƒ } t t  t t t t ƒ d/ d0 ƒ } t t  t t t t ƒ d1 d2 ƒ } t | d3 ƒ } | t t  t t ƒ d4 d5 ƒ k s]t ‚ t | d6 ƒ } | t t  t t t t ƒ d7 d8 d9 ƒ k sœt ‚ t | d: ƒ } | t t  t t t t ƒ d; d< d= ƒ k sÛt ‚ d  S(>   Ni   i   i    i   i   i   i   i   (   i   i   (   i    i   (   i   i   (   i   i   (   i   i   (   i    i   (   i    i   (   i   i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i    i   (   i   i   (   i   i   (   i    i   (   i   i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i    i   (   i   i   (   i   i   (   i    i   (   i   i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   i   i   (   i   i   (   i   i   (   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   R   R    t   argsR   R   (   t   expr1t   expr2R(   t   cg1t   cg2t   cgnestedt   cg3t   cg4(    (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyt   test_codegen_array_flattenf   sF    !!-''0!03!03!!'0c       	   C   s×  t  t t f }  t |  ƒ t  t t f f k s4 t ‚ t  t t f t t t f }  t |  ƒ t t  t ƒ t t t t f f k s… t ‚ t  t t f t t t f }  t |  ƒ t	 t t  t ƒ d ƒ t t t f f k sÜ t ‚ t
 t  t t f t t t f t d t d f ƒ }  t |  ƒ t t t  t ƒ d ƒ t t f f k sFt ‚ t  t t f t t t f }  t |  ƒ t t  t ƒ t t f f k s‘t ‚ t  t t f t t t f }  t |  ƒ t t  t t t d d g ƒ ƒ ƒ t t f f k sñt ‚ t  t t f t  t t f }  t |  ƒ t t  t t  t d d g ƒ ƒ ƒ t t f f k sQt ‚ t  t t t t f }  t |  ƒ t t t  t t ƒ d	 d
 ƒ t t f f k s¥t ‚ |  j }  t |  ƒ \ } } | t	 t t  t t ƒ d d ƒ k sêt ‚ t | ƒ d k st ‚ t t t ƒ t  t t f }  t |  ƒ t  t t h t f f k sIt ‚ t t t ƒ t t t ƒ t  t t f }  t |  ƒ t  t t t h t f f k s t ‚ t t t ƒ t  t t f t t t f t t t f t  t t f }  t |  ƒ t	 t t t  t ƒ t t t  t ƒ t d d ƒ d d ƒ ƒ ƒ d ƒ t t t t t h ƒ f f k sYt ‚ t t t ƒ t t t ƒ t  t t f t t t f t t t f t  t t f }  t |  ƒ t	 t t t  t ƒ t t t  t ƒ t d d ƒ d d ƒ ƒ ƒ d ƒ t t t t t t h ƒ f f k s"t ‚ t t t ƒ t t t ƒ t t t ƒ t  t d f t t t ƒ }  t |  ƒ t  t t t t t h d f f k s™t ‚ t  t t f }  t |  ƒ t	 t  d ƒ t f f k sÓt ‚ d  S(   Ni   i   i    i   i   s   (i, j, _i_1, _i_2)(   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   R   R!   R$   R   R    R   t   kt   lR   R   R   R   R   R   R   R   t   functiont   strR   t	   frozensett   mt   n(   R(   t   ret1t   ret2(    (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyt   test_codegen_array_parsež   sL    $3946-BB<	***-G*-T*0D3c          C   sv   t  t d ƒ }  |  t  t d ƒ k s* t ‚ t  t t t t ƒ d d ƒ }  |  t  t t t t ƒ d	 d
 ƒ k sr t ‚ d  S(   Ni   i    i   i   (   i   i    (   i    i   (   i   i   (   i   i    (   i   i   (   i    i   (   R   R   R    R   R   R   (   R&   (    (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyt   test_codegen_array_diagonalÇ   s    c          C   s{  t  t t t d d g ƒ ƒ }  t |  ƒ } | t t t t t t g ƒ g ƒ k sW t ‚ t | ƒ t t t ƒ k sy t ‚ t t	 t
 f t t	 t
 f }  t |  ƒ \ } } t | ƒ } | t t t t g ƒ k sÖ t ‚ t | ƒ t t k sò t ‚ t t	 t
 f t t
 t	 f }  t |  ƒ \ } } t | ƒ } | t t t t t t g ƒ g ƒ k s[t ‚ t | ƒ t t j k szt ‚ t t	 t
 f t t t f t t	 t
 f t t t f }  t |  ƒ \ } } t | ƒ } | t t t t t g ƒ t t t g ƒ g ƒ k st ‚ t t t t	 t
 f }  t |  ƒ \ } } t | ƒ } | t t t t t t g ƒ g ƒ k snt ‚ t | ƒ t t t k sŽt ‚ t t t	 t
 f t t t
 t f t
 d t d f ƒ }  t |  ƒ \ } } t | ƒ } | t t t t t g ƒ k st ‚ t | ƒ t t t k s(t ‚ t t t
 t f t t t
 f t t	 t
 f t t t f t t	 t
 f t t t f t
 d t d f t d t d f ƒ }  t |  ƒ \ } } t | ƒ } | t t t t t t t t t t t g ƒ g ƒ t g ƒ t t t t t t t t t g ƒ g ƒ t g ƒ g ƒ k s=t ‚ t | ƒ t t t j t t t t j t k swt ‚ d  S(   Ni   i    (   R   R   R   R   R	   R   R   R    R   R!   R$   R   R   R0   R;   R<   R
   R   R   R   R@   RA   (   R(   t   rect   p1t   p2(    (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyt(   test_codegen_recognize_matrix_expressionÏ   sF    -"!-:9- 8$ |	0Bc       	      s†  t  t t t t ƒ ‰  ˆ  j t t t t t t t t f k sB t ‚ t d t	 t
 ƒ }  t  t |  ƒ ‰  ˆ  j t t t	 t
 f k s„ t ‚ t ˆ  d ƒ } | j t	 t
 f k s® t ‚ t ˆ  d	 ƒ } | j t	 t
 t f k sÛ t ‚ t ˆ  d d d d g ƒ } | j t	 t t
 t f k st ‚ t  t |  ƒ } t ˆ  | ƒ } | j t t t	 t
 f k sVt ‚ t t ‡  f d †  ƒ t t ‡  f d †  ƒ d  S(
   Nt   Zi    i   i   i   c              s   t  ˆ  d ƒ S(   Ni   i   (   i   i   (   R   (    (   R(   (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyt   <lambda>  t    c              s   t  ˆ  d ƒ S(   Ni   i   (   i   i   (   R   (    (   R(   (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyRK     RL   (   i    i   (   i    i   (   R   R   R   R   R   t   shapeR;   R    R   R@   RA   R   R   R   R   R   t
   ValueError(   RJ   R4   t   exprpt   expr3(    (   R(   sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyt   test_codegen_array_shapeþ   s     -!!!c              s†  t  t t t f t d d f ƒ ‰  t t ‡  f d †  ƒ t  t t t f t d t f ƒ ‰  t t ‡  f d †  ƒ t  t t t f t d t d f ƒ ‰  t t ‡  f d †  ƒ t  t t t f t t t f t d d f ƒ ‰  t t ‡  f d †  ƒ t  t t t f t t t f t d t f ƒ ‰  t t ‡  f d †  ƒ t  t t t f t t t f t d t d f ƒ ‰  t t ‡  f d	 †  ƒ d  S(
   Ni    i   c              s
   t  ˆ  ƒ S(   N(   R   (    (   R(   (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyRK     RL   c              s
   t  ˆ  ƒ S(   N(   R   (    (   R(   (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyRK     RL   i   c              s
   t  ˆ  ƒ S(   N(   R   (    (   R(   (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyRK     RL   c              s
   t  ˆ  ƒ S(   N(   R   (    (   R(   (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyRK     RL   c              s
   t  ˆ  ƒ S(   N(   R   (    (   R(   (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyRK      RL   c              s
   t  ˆ  ƒ S(   N(   R   (    (   R(   (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyRK   "  RL   (	   R   R   R!   R   RN   R;   R$   R   R@   (    (    (   R(   sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyt&   test_codegen_array_parse_out_of_bounds  s    ""&004c          C   sï  t  t t t ƒ d d d d g ƒ }  |  j ƒ  } | t t t  t d d g ƒ ƒ k sZ t ‚ t | ƒ t t j g k s{ t ‚ t  t t t ƒ d d d d g ƒ }  |  j ƒ  } | t t  t d d g ƒ t  t d d g ƒ ƒ k sä t ‚ t | ƒ t j t j g k st ‚ t  t t t ƒ d d d d g ƒ }  |  j ƒ  } | t t  t d d g ƒ t  t d d g ƒ ƒ k sqt ‚ t | ƒ t j t j g k s•t ‚ t  t t t t ƒ d ƒ d d g ƒ }  |  j ƒ  } | t t  t t t ƒ d d g g ƒ d ƒ k sþt ‚ t  t t t ƒ d d d d g ƒ }  |  j ƒ  } | t t  t d d g ƒ t  t d d g ƒ ƒ k sgt ‚ t  t t t t t	 ƒ d	 d
 ƒ d d g ƒ }  |  j ƒ  } | t t  t t t t	 ƒ d d g g ƒ d d ƒ k sÜt ‚ | j
 j ƒ  } d  S(   Ni    i   i   i   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   R   R   R   R   t   nest_permutationR    R   R0   R   R   R(   (   R&   t   sunkt   sunk2(    (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyt   test_codegen_permutedims_sink%  s,    $*!$9$$9$'6$9-<c          C   s´   t  t }  t |  ƒ t t t  t ƒ d ƒ k s4 t ‚ t t  ƒ }  t |  ƒ t t  d d g ƒ k sg t ‚ t  t t ƒ }  t |  ƒ t t t  t t d d g ƒ ƒ d ƒ k s° t ‚ d  S(   Ni   i   i    (   i   i   (   i   i   (   R   R   R   R   R   R    R   R   (   R(   (    (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyt"   test_parsing_of_matrix_expressionsD  s    
*'c          C   sŽ   t  d t d ƒ }  t  d t d ƒ } |  j | } | d } t | ƒ } | t t |  | ƒ d ƒ k sk t ‚ t | ƒ |  j | k sŠ t ‚ d  S(   Nt   ai   t   bi    i   (   i    i    (   i    i   (   R   R;   R0   R   R   R   R    R   (   RX   RY   R(   R*   R&   (    (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyt   test_special_matricesP  s    
$N(9   t   sympyR    R   t   sympy.codegen.array_utilsR   R   R   R   R   R   R   R	   R
   R   R   R   R   R   R   t   sympy.combinatoricsR   t(   sympy.functions.special.tensor_functionsR   t"   sympy.matrices.expressions.matexprR   t   sympy.matricesR   R   R   R   t   sympy.utilities.pytestR   R   R   R"   R!   R$   R;   R<   R@   RA   R   R   R   R   R+   R/   R1   R:   RD   RE   RI   RQ   RR   RV   RW   RZ   (    (    (    sC   lib/python2.7/site-packages/sympy/codegen/tests/test_array_utils.pyt   <module>   s2   X"			!	8	)		/				