
    Ed
                         d dl mZ d dlmZmZ d dlmZ d dlmZ  G d de          Z	d dl
mZmZ d dlmZ d	 Zeed<   d
S )    )_sympify)SBasic)NonSquareMatrixError)MatPowc                   |    e Zd ZdZdZej        Zej        fdZe	d             Z
e	d             Zd Zd Zd Zd	 Zd
S )Inversea  
    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)

    Tc                     t          |          }t          |          }|j        st          d          |j        st	          d|z            t          j        | ||          S )Nzmat should be a matrixzInverse of non-square matrix %s)r   	is_Matrix	TypeError	is_squarer   r   __new__)clsmatexps      Blib/python3.11/site-packages/sympy/matrices/expressions/inverse.pyr   zInverse.__new__#   sf     smmsmm} 	64555} 	P&'H3'NOOO}S#s+++    c                     | j         d         S Nr   )argsselfs    r   argzInverse.arg.   s    y|r   c                     | j         j        S N)r   shaper   s    r   r   zInverse.shape2   s    x~r   c                     | j         S r   )r   r   s    r   _eval_inversezInverse._eval_inverse6   s	    xr   c                 4    ddl m} d || j                  z  S )Nr   )det   )&sympy.matrices.expressions.determinantr    r   )r   r    s     r   _eval_determinantzInverse._eval_determinant9   s(    >>>>>>TXr   c                     d|v r|d         dk    r| S | j         }|                    dd          r |j        di |}|                                S )N
inv_expandFdeepT )r   getdoitinverse)r   hintsr   s      r   r)   zInverse.doit=   sg    5  	U<%8E%A 	Kh99VT"" 	$#(##U##C{{}}r   c                     | j         d         }|                    |          }|D ](}|xj        | j         z  c_        |xj        | z  c_        )|S r   )r   _eval_derivative_matrix_linesfirst_pointerTsecond_pointer)r   xr   lineslines        r   r-   z%Inverse._eval_derivative_matrix_linesG   sc    il11!44 	( 	(D46')4'r   N)__name__
__module____qualname____doc__
is_Inverser   NegativeOner   r   propertyr   r   r   r#   r)   r-   r'   r   r   r	   r	      s         . J
-Cm 	, 	, 	, 	,   X   X          r   r	   )askQ)handlers_dictc                 J   t          t          j        |           |          r| j        j        S t          t          j        |           |          r| j                                        S t          t          j        |           |          rt          d| j        z            | S )z
    >>> 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
    zInverse of singular matrix %s)	r;   r<   
orthogonalr   r/   unitary	conjugatesingular
ValueError)exprassumptionss     r   refine_InverserF   T   s     1<{++ Exz	QYt__k	*	* Ex!!###	QZ{	+	+ E848CDDDKr   N)sympy.core.sympifyr   
sympy.corer   r   sympy.matrices.commonr   !sympy.matrices.expressions.matpowr   r	   sympy.assumptions.askr;   r<   sympy.assumptions.refiner=   rF   r'   r   r   <module>rM      s    ' ' ' ' ' '         6 6 6 6 6 6 4 4 4 4 4 4E E E E Ef E E EP ) ( ( ( ( ( ( ( 2 2 2 2 2 2  & *i   r   