
    sg                     z    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<   y
)    )_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
 Zd Zd Zy)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                  du rt	        d|z        t        j                  | ||      S )Nzmat should be a matrixFzInverse of non-square matrix %s)r   	is_Matrix	TypeError	is_squarer   r   __new__)clsmatexps      U/var/www/html/venv/lib/python3.12/site-packages/sympy/matrices/expressions/inverse.pyr   zInverse.__new__#   sY     smsm}}455==E!&'H3'NOO}}S#s++    c                      | j                   d   S Nr   )argsselfs    r   argzInverse.arg.   s    yy|r   c                 .    | j                   j                  S N)r   shaper   s    r   r   zInverse.shape2   s    xx~~r   c                     | j                   S r   )r   r   s    r   _eval_inversezInverse._eval_inverse6   s    xxr   c                 H    t        | j                  j                               S r   )r	   r   	transposer   s    r   _eval_transposezInverse._eval_transpose9       txx))+,,r   c                 H    t        | j                  j                               S r   )r	   r   adjointr   s    r   _eval_adjointzInverse._eval_adjoint<   s    txx'')**r   c                 H    t        | j                  j                               S r   )r	   r   	conjugater   s    r   _eval_conjugatezInverse._eval_conjugate?   r"   r   c                 8    ddl m} d || j                        z  S )Nr   )det   )&sympy.matrices.expressions.determinantr*   r   )r   r*   s     r   _eval_determinantzInverse._eval_determinantB   s    >TXXr   c                     d|v r
|d   dk(  r| S | j                   }|j                  dd      r |j                  di |}|j                         S )N
inv_expandFdeepT )r   getdoitinverse)r   hintsr   s      r   r3   zInverse.doitF   sQ    5 U<%8E%AKhh99VT"#((#U#C{{}r   c                     | j                   d   }|j                  |      }|D ]7  }|xj                  | j                   z  c_        |xj                  | z  c_        9 |S r   )r   _eval_derivative_matrix_linesfirst_pointerTsecond_pointer)r   xr   lineslines        r   r7   z%Inverse._eval_derivative_matrix_linesP   s]    iil11!4 	(D466')4'	( r   N)__name__
__module____qualname____doc__
is_Inverser   NegativeOner   r   propertyr   r   r   r!   r%   r(   r-   r3   r7   r1   r   r   r	   r	      sn    . J
--Cmm 	,    -+-r   r	   )askQ)handlers_dictc                 P   t        t        j                  |       |      r| j                  j                  S t        t        j
                  |       |      r| j                  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)	rE   rF   
orthogonalr   r9   unitaryr'   singular
ValueError)exprassumptionss     r   refine_InverserO   ]   sw     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.askrE   rF   sympy.assumptions.refinerG   rO   r1   r   r   <module>rV      s9    '  : 4Nf Nb ) 2& *i r   