ó
~9­\c           @  s{   d  d l  m Z m Z d  d l m Z m Z m Z m Z d  d l m	 Z	 d d l
 m Z d e f d „  ƒ  YZ d „  Z d	 S(
   iÿÿÿÿ(   t   print_functiont   division(   t   Basict   Exprt   sympifyt   S(   t
   MatrixBasei   (   t
   ShapeErrort   Tracec           B  s_   e  Z d  Z e Z e Z d „  Z d „  Z d „  Z d „  Z	 e
 d „  ƒ Z d „  Z d „  Z RS(   sÔ   Matrix Trace

    Represents the trace of a matrix expression.

    Examples
    ========

    >>> from sympy import MatrixSymbol, Trace, eye
    >>> A = MatrixSymbol('A', 3, 3)
    >>> Trace(A)
    Trace(A)
    c         C  sV   t  | ƒ } | j s. t d t | ƒ ƒ ‚ n  | j sF t d ƒ ‚ n  t j |  | ƒ S(   Ns#   input to Trace, %s, is not a matrixs   Trace of a non-square matrix(   R   t	   is_Matrixt	   TypeErrort   strt	   is_squareR   R   t   __new__(   t   clst   mat(    (    s?   lib/python2.7/site-packages/sympy/matrices/expressions/trace.pyR      s    		c         C  s   |  S(   N(    (   t   self(    (    s?   lib/python2.7/site-packages/sympy/matrices/expressions/trace.pyt   _eval_transpose#   s    c         C  s   d d l  m } | |  | ƒ S(   Niÿÿÿÿ(   t   _matrix_derivative(   t"   sympy.matrices.expressions.matexprR   (   R   t   vR   (    (    s?   lib/python2.7/site-packages/sympy/matrices/expressions/trace.pyt   _eval_derivative&   s    c         C  s“   |  j  d j | ƒ } xv | D]n } | j d k rQ | j | j | j j 9_ n" | j t | j | j j ƒ 9_ t j | _ t j | _ q W| S(   Ni    i   (	   t   argst   _eval_derivative_matrix_linest   highert   firstt   secondt   TR   R   t   One(   R   t   xt   rt   lr(    (    s?   lib/python2.7/site-packages/sympy/matrices/expressions/trace.pyR   *   s    "c         C  s   |  j  d S(   Ni    (   R   (   R   (    (    s?   lib/python2.7/site-packages/sympy/matrices/expressions/trace.pyt   arg6   s    c         K  s†   | j  d t ƒ rV |  j j |   } y | j ƒ  SWq‚ t t f k
 rR t | ƒ SXn, t |  j t	 ƒ ru t
 |  j ƒ St |  j ƒ Sd  S(   Nt   deep(   t   gett   TrueR    t   doitt   _eval_tracet   AttributeErrort   NotImplementedErrorR   t
   isinstanceR   t   trace(   R   t   kwargsR    (    (    s?   lib/python2.7/site-packages/sympy/matrices/expressions/trace.pyR$   :   s    c         K  sU   d d l  m } m } | d ƒ } | |  j | | f | d |  j j d f ƒ j ƒ  S(   Niÿÿÿÿ(   t   Sumt   Dummyt   ii    i   (   t   sympyR+   R,   R    t   rowsR$   (   R   t   exprR*   R+   R,   R-   (    (    s?   lib/python2.7/site-packages/sympy/matrices/expressions/trace.pyt   _eval_rewrite_as_SumH   s    (   t   __name__t
   __module__t   __doc__R#   t   is_Tracet   is_commutativeR   R   R   R   t   propertyR    R$   R1   (    (    (    s?   lib/python2.7/site-packages/sympy/matrices/expressions/trace.pyR      s   					c         C  s   t  |  ƒ j ƒ  S(   s"  Trace of a Matrix.  Sum of the diagonal elements.

    Examples
    ========

    >>> from sympy import trace, Symbol, MatrixSymbol, pprint, eye
    >>> n = Symbol('n')
    >>> X = MatrixSymbol('X', n, n)  # A square matrix
    >>> trace(2*X)
    2*Trace(X)
    >>> trace(eye(3))
    3
    (   R   R$   (   R0   (    (    s?   lib/python2.7/site-packages/sympy/matrices/expressions/trace.pyR)   N   s    N(   t
   __future__R    R   R.   R   R   R   R   t   sympy.matrices.matricesR   t   matexprR   R   R)   (    (    (    s?   lib/python2.7/site-packages/sympy/matrices/expressions/trace.pyt   <module>   s
   "F