
    Ed                         d dl mZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ ddlmZ  G d	 d
e          Z G d de          Z G d de          Z G d de          Z G d de          ZdS )    )askQ)Eq)S)_sympify)KroneckerDeltaNonInvertibleMatrixError   )
MatrixExprc                   r     e Zd ZdZdZ fdZed             Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Z xZS )
ZeroMatrixzThe Matrix Zero 0 - additive identity

    Examples
    ========

    >>> from sympy import MatrixSymbol, ZeroMatrix
    >>> A = MatrixSymbol('A', 3, 5)
    >>> Z = ZeroMatrix(3, 5)
    >>> A + Z
    A
    >>> Z*A.T
    0
    Tc                     t          |          t          |          }}|                     |           |                     |           t                                          | ||          S Nr   
_check_dimsuper__new__)clsmn	__class__s      Blib/python3.11/site-packages/sympy/matrices/expressions/special.pyr   zZeroMatrix.__new__   sV    {{HQKK1qqwwsAq)))    c                 6    | j         d         | j         d         fS Nr   r   argsselfs    r   shapezZeroMatrix.shape!       	!dil++r   c                 8    |dk     dk    rt          d          | S )Nr   TMatrix det == 0; not invertibler	   r    exps     r   _eval_powerzZeroMatrix._eval_power%   s(    !G 	N*+LMMMr   c                 6    t          | j        | j                  S r   r   colsrowsr   s    r   _eval_transposezZeroMatrix._eval_transpose+       $)TY///r   c                 6    t          | j        | j                  S r   r)   r   s    r   _eval_adjointzZeroMatrix._eval_adjoint.   r-   r   c                     t           j        S r   r   Zeror   s    r   _eval_tracezZeroMatrix._eval_trace1   	    vr   c                     t           j        S r   r1   r   s    r   _eval_determinantzZeroMatrix._eval_determinant4   r4   r   c                      t          d          )N Matrix det == 0; not invertible.r	   r   s    r   _eval_inversezZeroMatrix._eval_inverse7   s    &'IJJJr   c                 
    | | fS r    r   s    r   _eval_as_real_imagzZeroMatrix._eval_as_real_imag:   s    d|r   c                     | S r   r;   r   s    r   _eval_conjugatezZeroMatrix._eval_conjugate=       r   c                     t           j        S r   r1   r    ijkwargss       r   _entryzZeroMatrix._entry@   r4   r   )__name__
__module____qualname____doc__is_ZeroMatrixr   propertyr!   r'   r,   r/   r3   r6   r9   r<   r>   rE   __classcell__r   s   @r   r   r   
   s          M* * * * * , , X,  0 0 00 0 0    K K K          r   r   c                   z     e Zd ZdZ fdZed             Zed             Zed             Zd Z	d Z
 fdZ xZS )	GenericZeroMatrixz
    A zero matrix without a specified shape

    This exists primarily so MatAdd() with no arguments can return something
    meaningful.
    c                 T    t          t          |                               |           S r   )r   r   r   r   r   s    r   r   zGenericZeroMatrix.__new__K   s#     Z%%--c222r   c                      t          d          Nz1GenericZeroMatrix does not have a specified shape	TypeErrorr   s    r   r+   zGenericZeroMatrix.rowsP       KLLLr   c                      t          d          rS   rT   r   s    r   r*   zGenericZeroMatrix.colsT   rV   r   c                      t          d          rS   rT   r   s    r   r!   zGenericZeroMatrix.shapeX   rV   r   c                 ,    t          |t                    S r   )
isinstancerO   r    others     r   __eq__zGenericZeroMatrix.__eq__]   s    %!2333r   c                     | |k     S r   r;   r[   s     r   __ne__zGenericZeroMatrix.__ne__`       EM""r   c                 D    t                                                      S r   r   __hash__r    r   s    r   rc   zGenericZeroMatrix.__hash__c       ww!!!r   rF   rG   rH   rI   r   rK   r+   r*   r!   r]   r_   rc   rL   rM   s   @r   rO   rO   D   s         3 3 3 3 3
 M M XM M M XM M M XM4 4 4# # #" " " " " " " " "r   rO   c                        e Zd ZdZdZ fdZed             Zed             Zed             Z	ed             Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Z xZS )IdentityzThe Matrix Identity I - multiplicative identity

    Examples
    ========

    >>> from sympy import Identity, MatrixSymbol
    >>> A = MatrixSymbol('A', 3, 5)
    >>> I = Identity(3)
    >>> I*A
    A
    Tc                     t          |          }|                     |           t                                          | |          S r   r   )r   r   r   s     r   r   zIdentity.__new__w   s8    QKKqwwsA&&&r   c                     | j         d         S Nr   r   r   s    r   r+   zIdentity.rows}       y|r   c                     | j         d         S rk   r   r   s    r   r*   zIdentity.cols   rl   r   c                 6    | j         d         | j         d         fS rk   r   r   s    r   r!   zIdentity.shape   r"   r   c                     dS NTr;   r   s    r   	is_squarezIdentity.is_square   s    tr   c                     | S r   r;   r   s    r   r,   zIdentity._eval_transpose   r?   r   c                     | j         S r   )r+   r   s    r   r3   zIdentity._eval_trace   s
    yr   c                     | S r   r;   r   s    r   r9   zIdentity._eval_inverse   r?   r   c                 "    | t          | j         fS r   r   r!   r   s    r   r<   zIdentity._eval_as_real_imag       j$*-..r   c                     | S r   r;   r   s    r   r>   zIdentity._eval_conjugate   r?   r   c                     | S r   r;   r   s    r   r/   zIdentity._eval_adjoint   r?   r   c                     t          ||          }|t          j        u rt          j        S |t          j        u rt          j        S t          ||d| j        dz
  f          S r   )r   r   trueOnefalser2   r   r*   )r    rB   rC   rD   eqs        r   rE   zIdentity._entry   sV    1XX< 	5L17] 	6MaQ	!$4555r   c                     t           j        S r   r   r|   r   s    r   r6   zIdentity._eval_determinant   	    ur   c                     | S r   r;   r%   s     r   r'   zIdentity._eval_power   r?   r   )rF   rG   rH   rI   is_Identityr   rK   r+   r*   r!   rq   r,   r3   r9   r<   r>   r/   rE   r6   r'   rL   rM   s   @r   rh   rh   h   s<       
 
 K' ' ' ' '   X   X , , X,   X      / / /    6 6 6        r   rh   c                   z     e Zd ZdZ fdZed             Zed             Zed             Zd Z	d Z
 fdZ xZS )	GenericIdentityz
    An identity matrix without a specified shape

    This exists primarily so MatMul() with no arguments can return something
    meaningful.
    c                 T    t          t          |                               |           S r   )r   rh   r   rQ   s    r   r   zGenericIdentity.__new__   s#     Xs##++C000r   c                      t          d          Nz/GenericIdentity does not have a specified shaperT   r   s    r   r+   zGenericIdentity.rows       IJJJr   c                      t          d          r   rT   r   s    r   r*   zGenericIdentity.cols   r   r   c                      t          d          r   rT   r   s    r   r!   zGenericIdentity.shape   r   r   c                 ,    t          |t                    S r   )rZ   r   r[   s     r   r]   zGenericIdentity.__eq__   s    %111r   c                     | |k     S r   r;   r[   s     r   r_   zGenericIdentity.__ne__   r`   r   c                 D    t                                                      S r   rb   rd   s    r   rc   zGenericIdentity.__hash__   re   r   rf   rM   s   @r   r   r      s         1 1 1 1 1
 K K XK K K XK K K XK2 2 2# # #" " " " " " " " "r   r   c                        e Zd ZdZd fd	Zed             Zed             Zd Zd Z	 fdZ
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Z xZS )	OneMatrixz,
    Matrix whose all entries are ones.
    Fc                 N   t          |          t          |          }}|                     |           |                     |           |r6t          |d          t          |d          z  }|dk    rt          d          S t	                                          | ||          }|S )Nr   T)r   r   r   rh   r   r   )r   r   r   evaluate	conditionobjr   s         r   r   zOneMatrix.__new__   s    {{HQKK1qq 	#1a2a88+ID  #{{"ggooc1a((
r   c                     | j         S r   )_argsr   s    r   r!   zOneMatrix.shape   s
    zr   c                 2    |                                  dk    S rp   )_is_1x1r   s    r   r   zOneMatrix.is_Identity   s    ||~~%%r   c                 ,    ddl m}  |j        | j         S )Nr   )ImmutableDenseMatrix)sympy.matrices.immutabler   onesr!   )r    r   s     r   as_explicitzOneMatrix.as_explicit   s'    AAAAAA(#($*55r   c                 t    | j         }                    dd          rfd|D             } | j        |ddiS )NdeepTc                 *    g | ]} |j         d i S )r;   )doit).0ahintss     r   
<listcomp>z"OneMatrix.doit.<locals>.<listcomp>   s'    222FAFOOUOO222r   r   )r   getfunc)r    r   r   s    ` r   r   zOneMatrix.doit   sP    y99VT"" 	32222T222Dty$....r   c                 L   |                                  dk    rt          d          S |dk     dk    rt          d          t          t	          j        |                    r"| j        d         |dz
  z  t          | j         z  S t                      	                    |          S )NTr   r   r$   )
r   rh   r
   r   r   integerr!   r   r   r'   )r    r&   r   s     r   r'   zOneMatrix._eval_power   s    <<>>T! 	A;;!G 	N*+LMMMqy~~ 	G:a=S1W-	4:0FFFww""3'''r   c                 6    t          | j        | j                  S r   r   r*   r+   r   s    r   r,   zOneMatrix._eval_transpose       DI...r   c                 6    t          | j        | j                  S r   r   r   s    r   r/   zOneMatrix._eval_adjoint  r   r   c                 *    t           j        | j        z  S r   )r   r|   r+   r   s    r   r3   zOneMatrix._eval_trace  s    uTYr   c                 j    | j         }t          |d         d          t          |d         d          z  S )z-Returns true if the matrix is known to be 1x1r   r   )r!   r   )r    r!   s     r   r   zOneMatrix._is_1x1  s,    
%(AE!Ha00r   c                     |                                  }|dk    rt          j        S |dk    rt          j        S ddlm}  ||           S )NTFr   )Determinant)r   r   r|   r2   &sympy.matrices.expressions.determinantr   )r    r   r   s      r   r6   zOneMatrix._eval_determinant  sY    LLNN	 	%5L% 	%6MJJJJJJ;t$$$r   c                     |                                  }|dk    rt          d          S |dk    rt          d          ddlm}  ||           S )NTr   Fr8   )Inverse)r   rh   r
   inverser   )r    r   r   s      r   r9   zOneMatrix._eval_inverse  sd    LLNN	 	!A;;% 	!*+MNNN((((((74== r   c                 "    | t          | j         fS r   rv   r   s    r   r<   zOneMatrix._eval_as_real_imag   rw   r   c                     | S r   r;   r   s    r   r>   zOneMatrix._eval_conjugate#  r?   r   c                     t           j        S r   r   rA   s       r   rE   zOneMatrix._entry&  r   r   )F)rF   rG   rH   rI   r   rK   r!   r   r   r   r'   r,   r/   r3   r   r6   r9   r<   r>   rE   rL   rM   s   @r   r   r      s;                X & & X&6 6 6/ / /( ( ( ( (/ / // / /  1 1 1
% % %! ! !/ / /        r   r   N)sympy.assumptions.askr   r   sympy.core.relationalr   sympy.core.singletonr   sympy.core.sympifyr   (sympy.functions.special.tensor_functionsr   sympy.matrices.commonr
   matexprr   r   rO   rh   r   r   r;   r   r   <module>r      s{   ( ( ( ( ( ( ( ( $ $ $ $ $ $ " " " " " " ' ' ' ' ' ' C C C C C C : : : : : :      7 7 7 7 7 7 7 7t "  "  "  "  "
  "  "  "HC C C C Cz C C CL "  "  "  "  "h  "  "  "FV V V V V
 V V V V Vr   