
    \h                     z    S SK Jr  S SKJrJr  S SKJr  S SKJr   " S S\5      r	S SK
JrJr  S SKJr  S	 r\\S'   g
)    )_sympify)SBasic)NonSquareMatrixError)MatPowc                       \ rS rSrSrSr\R                  r\R                  4S jr	\
S 5       r\
S 5       rS rS rS	 rS
 rS rS rS rSrg)Inverse   a  
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                     [        U5      n[        U5      nUR                  (       d  [        S5      eUR                  SL a  [	        SU-  5      e[
        R                  " XU5      $ )Nzmat should be a matrixFzInverse of non-square matrix %s)r   	is_Matrix	TypeError	is_squarer   r   __new__)clsmatexps      Z/var/www/auris/envauris/lib/python3.13/site-packages/sympy/matrices/expressions/inverse.pyr   Inverse.__new__#   sW     smsm}}455==E!&'H3'NOO}}Ss++    c                      U R                   S   $ Nr   )argsselfs    r   argInverse.arg.   s    yy|r   c                 .    U R                   R                  $ N)r   shaper   s    r   r   Inverse.shape2   s    xx~~r   c                     U R                   $ r   )r   r   s    r   _eval_inverseInverse._eval_inverse6   s    xxr   c                 H    [        U R                  R                  5       5      $ r   )r	   r   	transposer   s    r   _eval_transposeInverse._eval_transpose9       txx))+,,r   c                 H    [        U R                  R                  5       5      $ r   )r	   r   adjointr   s    r   _eval_adjointInverse._eval_adjoint<   s    txx'')**r   c                 H    [        U R                  R                  5       5      $ r   )r	   r   	conjugater   s    r   _eval_conjugateInverse._eval_conjugate?   r(   r   c                 8    SSK Jn  SU" U R                  5      -  $ )Nr   )det   )&sympy.matrices.expressions.determinantr2   r   )r   r2   s     r   _eval_determinantInverse._eval_determinantB   s    >TXXr   c                     SU;   a  US   S:X  a  U $ U R                   nUR                  SS5      (       a  UR                  " S0 UD6nUR                  5       $ )N
inv_expandFdeepT )r   getdoitinverse)r   hintsr   s      r   r<   Inverse.doitF   sR    5 U<%8E%AKhh99VT""((#U#C{{}r   c                     U R                   S   nUR                  U5      nU H8  nU=R                  U R                  * -  sl        U=R                  U -  sl        M:     U$ r   )r   _eval_derivative_matrix_linesfirst_pointerTsecond_pointer)r   xr   lineslines        r   rA   %Inverse._eval_derivative_matrix_linesP   sX    iil11!4D466')4'  r   r:   N)__name__
__module____qualname____firstlineno____doc__
is_Inverser   NegativeOner   r   propertyr   r   r"   r&   r+   r/   r5   r<   rA   __static_attributes__r:   r   r   r	   r	      sn    . J
--Cmm 	,    -+-r   r	   )askQ)handlers_dictc                 t   [        [        R                  " U 5      U5      (       a  U R                  R                  $ [        [        R
                  " U 5      U5      (       a  U R                  R                  5       $ [        [        R                  " U 5      U5      (       a  [        SU R                  -  5      eU $ )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)	rR   rS   
orthogonalr   rC   unitaryr.   singular
ValueError)exprassumptionss     r   refine_Inverser\   ]   s     1<<{++xxzz	QYYt_k	*	*xx!!##	QZZ{	+	+8488CDDKr   N)sympy.core.sympifyr   
sympy.corer   r   sympy.matrices.exceptionsr   !sympy.matrices.expressions.matpowr   r	   sympy.assumptions.askrR   rS   sympy.assumptions.refinerT   r\   r:   r   r   <module>rc      s9    '  : 4Nf Nb ) 2& *i r   