ó
~9­\c           @   sY  d  Z  d d l m Z m Z m Z m Z m Z m Z d d l m Z m	 Z	 m
 Z
 m Z e d ƒ Z e d e e ƒ Z e d e d ƒ Z e d e e ƒ Z e d	 e e ƒ Z e d
 e e ƒ Z e d e e ƒ Z e d e d ƒ Z e d e d ƒ Z e d e d ƒ Z e d e d ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d S(   sa   
Some examples have been taken from:

http://www.math.uwaterloo.ca/~hwolkowi//matrixcookbook.pdf
iÿÿÿÿ(   t   MatrixSymbolt   Inverset   symbolst   Determinantt   Tracet
   Derivative(   t   MatAddt   Identityt   MatMult
   ZeroMatrixt   kt   Xt   xi   t   At   Bt   Ct   Dt   at   bt   ct   dc           C   sà   t  j t  ƒ t t  t  ƒ k s$ t ‚ t  j j t  ƒ t t  j t  ƒ k sN t ‚ d t  j t  ƒ t d t  t  ƒ k sz t ‚ t t  t  ƒ j t  ƒ t t t  t  ƒ t  ƒ k s° t ‚ t  t j t  ƒ t t  t t  ƒ k sÜ t ‚ d  S(   Ni   (   R   t   diffR   t   AssertionErrort   TR   R   (    (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_derivatives.pyt(   test_matrix_derivative_non_matrix_result   s
    $*,6c           C   s(   t  j t ƒ t t  t ƒ k s$ t ‚ d  S(   N(   R   R   R   R   R   (    (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_derivatives.pyt$   test_matrix_derivative_trivial_cases"   s    c          C   sú   t  j t t ƒ t }  |  j t ƒ t t ƒ j t  t j t t ƒ j k sT t ‚ t t t ƒ ƒ }  t t	 t t ƒ t
 ƒ }  |  j t ƒ t d t
 t	 t d j k s³ t ‚ t t t t	 ƒ ƒ }  |  j t ƒ t t t	 ƒ j d k sö t ‚ d  S(   Niÿÿÿÿi   (   R   R   R   R   R   R   R   R   R   R   R   (   t   expr(    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_derivatives.pyt#   test_matrix_derivative_with_inverse(   s    =3c          C   s!  t  j t  ƒ t t ƒ k s! t ‚ t  j j t  ƒ t t ƒ k sE t ‚ t  j t }  |  j t  ƒ t k sm t ‚ t j t  }  |  j t  ƒ t k s• t ‚ t j t t }  |  j t ƒ t t j k sÈ t ‚ t j t j t }  |  j t ƒ t t j k sþ t ‚ t j t t }  |  j t ƒ t t j k s1t ‚ t j t j t }  |  j t ƒ t t j k sgt ‚ t j t j t t	 }  |  j t ƒ t t t	 j t t	 t j k s´t ‚ t
 t  t j t t t  t }  |  j t  ƒ t
 j t t t  t t j t j t
 t  t k st ‚ t  j t
 t  }  |  j t  ƒ t
 t  t
 j t  k sXt ‚ t j t j t t t	 }  |  j t ƒ t j t t t	 j t t t	 t j k s´t ‚ t t t	 j t t t t	 }  |  j t ƒ t t t t	 t j t j t t t	 t j k st ‚ d  S(   N(   R   R   R   R
   R   R   R   R   R   R   R   R   R   R   (   R   (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_derivatives.pyt*   test_matrix_derivative_vectors_and_scalars<   s0    !$""""5!H*@!c          C   s£	  t  t ƒ t }  |  j t ƒ t t  t ƒ t t ƒ k s> t ‚ t  t ƒ }  |  j t ƒ t t ƒ k sk t ‚ t  t t ƒ }  |  j t ƒ t j k s™ t ‚ t  t t t	 ƒ }  |  j t ƒ t j t	 j k sÒ t ‚ t  t t j t	 ƒ }  |  j t ƒ t	 t k st ‚ t  t j t ƒ }  |  j t ƒ t k s6t ‚ t  t t j ƒ }  |  j t ƒ t k sdt ‚ t  t d ƒ }  |  j t ƒ d t j k s–t ‚ t  t d t	 ƒ }  |  j t ƒ t t	 t	 t j k sÔt ‚ t  t
 t t t	 ƒ ƒ }  |  j t ƒ t t	 t	 t j k st ‚ t  t j t	 t ƒ }  |  j t ƒ t	 t t	 j t k sWt ‚ t  t	 t t j ƒ }  |  j t ƒ t	 t t	 j t k s˜t ‚ t  t t j t	 ƒ }  |  j t ƒ t	 t t	 j t k sÙt ‚ t  t t	 t j ƒ }  |  j t ƒ t t	 j t t	 k st ‚ t  t	 t j t ƒ }  |  j t ƒ t t	 j t t	 k s[t ‚ t  t j t t	 ƒ }  |  j t ƒ t t	 j t t	 k sœt ‚ t  t t t	 t ƒ }  |  j t ƒ t j t j t	 j t	 j t j t j k sõt ‚ t  t j t ƒ }  |  j t ƒ d t k s't ‚ t  t t j ƒ }  |  j t ƒ d t k sYt ‚ t  t	 j t j t t t	 ƒ }  |  j t ƒ t j t t	 t	 j t t t	 t	 j k s»t ‚ t  t j t	 t t ƒ }  |  j t ƒ t	 t t t	 j t t j k st ‚ t  t t t	 t j t ƒ }  |  j t ƒ t j t j t t	 j t t t t	 k sjt ‚ t  t t t	 t t t t	 t j ƒ }  |  j t ƒ d t j t t t	 t t	 j k sÎt ‚ t  t t ƒ }  t  t t t ƒ }  t  t	 j t j t t t j t t t	 ƒ }  |  j t ƒ t t t j t t t	 t	 j t j t t	 t	 j t j t j t t t t	 t	 j t j t t t j t t j t j t t	 t	 j k sÎt ‚ t  t t d t	 ƒ }  |  j t ƒ t t ƒ j t j t	 j t t ƒ j k s&t ‚ t  t t j t t ƒ t ƒ }  |  j t ƒ t j ƒ  j t j t j ƒ  t j ƒ  j t j ƒ  j t j ƒ  j t t j ƒ  t j ƒ  t j ƒ  j k sÉt ‚ t  t j t t j ƒ  t j t	 t ƒ }  |  j t ƒ d t t t j t t j ƒ  t j t	 t t j t t j ƒ  d t	 t t j t t j ƒ  k srt ‚ t  t t j t t j ƒ  t j t	 t ƒ }  |  j t ƒ t	 t t t t j t t ƒ t t t t t j t t ƒ t j t	 t t t t j t t ƒ t j t t t j t t j t ƒ t j t	 j t t t j t t j t ƒ t	 j t t t j t t j t ƒ k sŸ	t ‚ d  S(   Ni   iÿÿÿÿiþÿÿÿ(   R   R   R   R   R   R   R   R
   R   R   R   R   R   t   inv(   R   (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_derivatives.pyt!   test_matrix_derivatives_of_tracesj   st    .!%
"********A"@5@+91«@!‚,}0c       	   C   sm  t  j t t t j t t t t j t j t  t j t t t j t t j t t t t t t j t j t t t t t j t t t t j d t t t d t t t j t j t t j t }  t t t t t j d t t t t j t  t j t t t t j t t t t t t j t j t j t t t t t  j t j t d t t  j t j t j t  t j t t d t t t j t j t  t j t t t d t t  j t j t j t  t j t t t t  j t t d t  t j t t j t t t j t t  j t t t  t j t j d t t j t t  j t t t  t j t j d t j t j t t j t j d t t  j t t t j t j d t j t t j t t  j t t t j t j d t t t  t j t j t t j t  t j t j t j t j t t j t j t t  j t t t  t j t j d t j t j t t t  t j t j t d t j t t t  t j t j t j t j t t d t t  j t j t j t  t j t j t j t  t j t j } |  j t ƒ | k sit	 ‚ d  S(   Ni   i*   i   (
   R   R   R   R   R   R   R   R   R   R   (   R   t   result(    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_derivatives.pyt+   test_derivatives_of_complicated_matrix_exprõ   s    Üÿ ÿ ÿ uc          C   s‰  d t  t ƒ }  |  j t ƒ d t t ƒ k s5 t ‚ t }  |  j t ƒ } t | t ƒ s_ t ‚ | t t t ƒ k sz t ‚ t  t ƒ d }  |  j t ƒ d t  t ƒ t t ƒ k s¹ t ‚ t  t ƒ t }  |  j t ƒ t |  t ƒ k sí t ‚ t  t  t ƒ t ƒ }  |  j t ƒ d t  t ƒ t t ƒ k s2t ‚ t  t  t  t ƒ t ƒ t ƒ }  |  j t ƒ d t  t ƒ d t t ƒ k s…t ‚ d  S(   Ni   i   (	   R   R   R   R   R
   R   t
   isinstanceR	   R   (   R   t   deriv(    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_derivatives.pyt"   test_mixed_deriv_mixed_expressionsû   s    %/$/ N(   t   __doc__t   sympyR    R   R   R   R   R   R   R   R   R	   R
   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R    R#   (    (    (    sP   lib/python2.7/site-packages/sympy/matrices/expressions/tests/test_derivatives.pyt   <module>   s(   ."					.	‹	