ó
~9­\c           @  s¯   d  d l  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 d e f d „  ƒ  YZ d  d l m Z m Z d  d	 l m Z d
 „  Z e e d <d S(   iÿÿÿÿ(   t   print_functiont   division(   t   _sympify(   t   St   Basic(   t
   ShapeError(   t   MatPowt   Inversec           B  st   e  Z d  Z e Z e d ƒ Z e d ƒ d „ Z e d „  ƒ Z	 e d „  ƒ Z
 d „  Z d „  Z d „  Z d „  Z RS(	   s  
    The multiplicative inverse of a matrix expression

    This is a symbolic object that simply stores its argument without
    evaluating it. To actually compute the inverse, use the ``.inverse()``
    method of matrices.

    Examples
    ========

    >>> from sympy import MatrixSymbol, Inverse
    >>> A = MatrixSymbol('A', 3, 3)
    >>> B = MatrixSymbol('B', 3, 3)
    >>> Inverse(A)
    A**(-1)
    >>> A.inverse() == Inverse(A)
    True
    >>> (A*B).inverse()
    B**(-1)*A**(-1)
    >>> Inverse(A*B)
    (A*B)**(-1)

    iÿÿÿÿc         C  sS   t  | ƒ } | j s$ t d ƒ ‚ n  | j s@ t d | ƒ ‚ n  t j |  | | ƒ S(   Ns   mat should be a matrixs   Inverse of non-square matrix %s(   R   t	   is_Matrixt	   TypeErrort	   is_squareR   R   t   __new__(   t   clst   matt   exp(    (    sA   lib/python2.7/site-packages/sympy/matrices/expressions/inverse.pyR   %   s    		c         C  s   |  j  d S(   Ni    (   t   args(   t   self(    (    sA   lib/python2.7/site-packages/sympy/matrices/expressions/inverse.pyt   arg/   s    c         C  s
   |  j  j S(   N(   R   t   shape(   R   (    (    sA   lib/python2.7/site-packages/sympy/matrices/expressions/inverse.pyR   3   s    c         C  s   |  j  S(   N(   R   (   R   (    (    sA   lib/python2.7/site-packages/sympy/matrices/expressions/inverse.pyt   _eval_inverse7   s    c         C  s!   d d l  m } d | |  j ƒ S(   Niÿÿÿÿ(   t   deti   (   t&   sympy.matrices.expressions.determinantR   R   (   R   R   (    (    sA   lib/python2.7/site-packages/sympy/matrices/expressions/inverse.pyt   _eval_determinant:   s    c         K  sY   d | k r  | d t  k r  |  S| j d t ƒ rH |  j j |   j ƒ  S|  j j ƒ  Sd  S(   Nt
   inv_expandt   deep(   t   Falset   gett   TrueR   t   doitt   inverse(   R   t   hints(    (    sA   lib/python2.7/site-packages/sympy/matrices/expressions/inverse.pyR   >   s
    c         C  s   |  j  d } | j | ƒ } x^ | D]V } | j rW | j |  9_ | j |  j 9_ q# | j |  j 9_ | j |  9_ q# W| S(   Ni    (   R   t   _eval_derivative_matrix_linest
   transposedt   firstt   secondt   T(   R   t   xR   t   linest   line(    (    sA   lib/python2.7/site-packages/sympy/matrices/expressions/inverse.pyR   F   s    	(   t   __name__t
   __module__t   __doc__R   t
   is_InverseR   R   R   t   propertyR   R   R   R   R   R   (    (    (    sA   lib/python2.7/site-packages/sympy/matrices/expressions/inverse.pyR   
   s   
			(   t   askt   Q(   t   handlers_dictc         C  sy   t  t j |  ƒ | ƒ r" |  j j St  t j |  ƒ | ƒ rG |  j j ƒ  St  t j |  ƒ | ƒ ru t d |  j ƒ ‚ n  |  S(   sÌ   
    >>> from sympy import MatrixSymbol, Q, assuming, refine
    >>> X = MatrixSymbol('X', 2, 2)
    >>> X.I
    X**(-1)
    >>> with assuming(Q.orthogonal(X)):
    ...     print(refine(X.I))
    X.T
    s   Inverse of singular matrix %s(	   R,   R-   t
   orthogonalR   R#   t   unitaryt	   conjugatet   singulart
   ValueError(   t   exprt   assumptions(    (    sA   lib/python2.7/site-packages/sympy/matrices/expressions/inverse.pyt   refine_InverseW   s    

N(   t
   __future__R    R   t   sympy.core.sympifyR   t
   sympy.coreR   R   t"   sympy.matrices.expressions.matexprR   t!   sympy.matrices.expressions.matpowR   R   t   sympy.assumptions.askR,   R-   t   sympy.assumptions.refineR.   R6   (    (    (    sA   lib/python2.7/site-packages/sympy/matrices/expressions/inverse.pyt   <module>   s   I	