
    \hK                         S SK JrJr  S SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJr  SSKJr   " S	 S
\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)    )askQ)Eq)S)_sympify)KroneckerDeltaNonInvertibleMatrixError   )
MatrixExprc                   v   ^  \ rS rSrSrSrU 4S jr\S 5       rS r	S r
S rS	 rS
 rS rS rS rS rSrU =r$ )
ZeroMatrix
   zThe 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                    > [        U5      [        U5      p!U R                  U5        U R                  U5        [        TU ]  XU5      $ Nr   
_check_dimsuper__new__)clsmn	__class__s      Z/var/www/auris/envauris/lib/python3.13/site-packages/sympy/matrices/expressions/special.pyr   ZeroMatrix.__new__   s;    {HQK1qqwsq))    c                 >    U R                   S   U R                   S   4$ Nr   r   argsselfs    r   shapeZeroMatrix.shape!       		!diil++r   c                 .    US:  S:X  a  [        S5      eU $ )Nr   TMatrix det == 0; not invertibler	   r"   exps     r   _eval_powerZeroMatrix._eval_power%   s    !G*+LMMr   c                 B    [        U R                  U R                  5      $ r   r   colsrowsr!   s    r   _eval_transposeZeroMatrix._eval_transpose+       $))TYY//r   c                 B    [        U R                  U R                  5      $ r   r-   r!   s    r   _eval_adjointZeroMatrix._eval_adjoint.   r2   r   c                 "    [         R                  $ r   r   Zeror!   s    r   _eval_traceZeroMatrix._eval_trace1       vvr   c                 "    [         R                  $ r   r7   r!   s    r   _eval_determinantZeroMatrix._eval_determinant4   r;   r   c                     [        S5      e)N Matrix det == 0; not invertible.r	   r!   s    r   _eval_inverseZeroMatrix._eval_inverse7   s    &'IJJr   c                     X 4$ r    r!   s    r   _eval_as_real_imagZeroMatrix._eval_as_real_imag:   s
    |r   c                     U $ r   rD   r!   s    r   _eval_conjugateZeroMatrix._eval_conjugate=       r   c                 "    [         R                  $ r   r7   r"   ijkwargss       r   _entryZeroMatrix._entry@   r;   r   rD   )__name__
__module____qualname____firstlineno____doc__is_ZeroMatrixr   propertyr#   r*   r0   r4   r9   r=   rA   rE   rH   rP   __static_attributes____classcell__r   s   @r   r   r   
   s[     M* , ,00K r   r   c                   t   ^  \ rS rSrSrU 4S jr\S 5       r\S 5       r\S 5       r	S r
S rU 4S	 jrS
rU =r$ )GenericZeroMatrixD   z
A zero matrix without a specified shape

This exists primarily so MatAdd() with no arguments can return something
meaningful.
c                 *   > [         [        U ]  U 5      $ r   )r   r   r   r   r   s    r   r   GenericZeroMatrix.__new__K   s     Z-c22r   c                     [        S5      eNz1GenericZeroMatrix does not have a specified shape	TypeErrorr!   s    r   r/   GenericZeroMatrix.rowsP       KLLr   c                     [        S5      erc   rd   r!   s    r   r.   GenericZeroMatrix.colsT   rg   r   c                     [        S5      erc   rd   r!   s    r   r#   GenericZeroMatrix.shapeX   rg   r   c                 "    [        U[        5      $ r   )
isinstancer]   r"   others     r   __eq__GenericZeroMatrix.__eq__]   s    %!233r   c                     X:X  + $ r   rD   rn   s     r   __ne__GenericZeroMatrix.__ne__`       ""r   c                     > [         TU ]  5       $ r   r   __hash__r"   r   s    r   rx   GenericZeroMatrix.__hash__c       w!!r   rD   )rR   rS   rT   rU   rV   r   rX   r/   r.   r#   rp   rs   rx   rY   rZ   r[   s   @r   r]   r]   D   sc    3
 M M M M M M4#" "r   r]   c                      ^  \ rS rSrSrSrU 4S jr\S 5       r\S 5       r	\S 5       r
\S 5       rS	 rS
 rS rS rS rS rS rS rS rSrU =r$ )Identityh   zThe Matrix Identity I - multiplicative identity

Examples
========

>>> from sympy import Identity, MatrixSymbol
>>> A = MatrixSymbol('A', 3, 5)
>>> I = Identity(3)
>>> I*A
A
Tc                 Z   > [        U5      nU R                  U5        [        TU ]  X5      $ r   r   )r   r   r   s     r   r   Identity.__new__w   s'    QKqws&&r   c                      U R                   S   $ Nr   r   r!   s    r   r/   Identity.rows}       yy|r   c                      U R                   S   $ r   r   r!   s    r   r.   Identity.cols   r   r   c                 >    U R                   S   U R                   S   4$ r   r   r!   s    r   r#   Identity.shape   r%   r   c                     gNTrD   r!   s    r   	is_squareIdentity.is_square       r   c                     U $ r   rD   r!   s    r   r0   Identity._eval_transpose   rJ   r   c                     U R                   $ r   )r/   r!   s    r   r9   Identity._eval_trace   s    yyr   c                     U $ r   rD   r!   s    r   rA   Identity._eval_inverse   rJ   r   c                 *    U [        U R                  6 4$ r   r   r#   r!   s    r   rE   Identity._eval_as_real_imag       j$**-..r   c                     U $ r   rD   r!   s    r   rH   Identity._eval_conjugate   rJ   r   c                     U $ r   rD   r!   s    r   r4   Identity._eval_adjoint   rJ   r   c                     [        X5      nU[        R                  L a  [        R                  $ U[        R                  L a  [        R
                  $ [        XSU R                  S-
  45      $ r   )r   r   trueOnefalser8   r   r.   )r"   rM   rN   rO   eqs        r   rP   Identity._entry   sM    X<55L177]66MaQ		!$455r   c                 "    [         R                  $ r   r   r   r!   s    r   r=   Identity._eval_determinant       uur   c                     U $ r   rD   r(   s     r   r*   Identity._eval_power   rJ   r   rD   )rR   rS   rT   rU   rV   is_Identityr   rX   r/   r.   r#   r   r0   r9   rA   rE   rH   r4   rP   r=   r*   rY   rZ   r[   s   @r   r}   r}   h   s    
 K'     , ,  /6 r   r}   c                      ^  \ rS rSrSrU 4S jr\S 5       r\S 5       r\S 5       r	\S 5       r
S rS	 rU 4S
 jrSrU =r$ )GenericIdentity   z
An identity matrix without a specified shape

This exists primarily so MatMul() with no arguments can return something
meaningful.
c                 *   > [         [        U ]  U 5      $ r   )r   r}   r   r`   s    r   r   GenericIdentity.__new__   s     Xs+C00r   c                     [        S5      eNz/GenericIdentity does not have a specified shaperd   r!   s    r   r/   GenericIdentity.rows       IJJr   c                     [        S5      er   rd   r!   s    r   r.   GenericIdentity.cols   r   r   c                     [        S5      er   rd   r!   s    r   r#   GenericIdentity.shape   r   r   c                     gr   rD   r!   s    r   r   GenericIdentity.is_square   r   r   c                 "    [        U[        5      $ r   )rm   r   rn   s     r   rp   GenericIdentity.__eq__   s    %11r   c                     X:X  + $ r   rD   rn   s     r   rs   GenericIdentity.__ne__   ru   r   c                     > [         TU ]  5       $ r   rw   ry   s    r   rx   GenericIdentity.__hash__   r{   r   rD   )rR   rS   rT   rU   rV   r   rX   r/   r.   r#   r   rp   rs   rx   rY   rZ   r[   s   @r   r   r      sw    1
 K K K K K K  2#" "r   r   c                      ^  \ rS rSrSrSU 4S jjr\S 5       r\S 5       rS r	S r
U 4S jrS	 rS
 rS rS rS rS rS rS rS rSrU =r$ )	OneMatrix   z$
Matrix whose all entries are ones.
c                    > [        U5      [        U5      p!U R                  U5        U R                  U5        U(       a*  [        US5      [        US5      -  nUS:X  a  [        S5      $ [        TU ]  XU5      nU$ )Nr   T)r   r   r   r}   r   r   )r   r   r   evaluate	conditionobjr   s         r   r   OneMatrix.__new__   sj    {HQK1qq1a2a8+ID {"goca(
r   c                     U R                   $ r   )_argsr!   s    r   r#   OneMatrix.shape   s    zzr   c                 (    U R                  5       S:H  $ r   )_is_1x1r!   s    r   r   OneMatrix.is_Identity   s    ||~%%r   c                 @    SSK Jn  UR                  " U R                  6 $ )Nr   )ImmutableDenseMatrix)sympy.matrices.immutabler   onesr#   )r"   r   s     r   as_explicitOneMatrix.as_explicit   s    A#(($**55r   c                     U R                   nUR                  SS5      (       a!  U Vs/ s H  o3R                  " S0 UD6PM     nnU R                  " USS06$ s  snf )NdeepTr   rD   )r    getdoitfunc)r"   hintsr    as       r   r   OneMatrix.doit   sQ    yy99VT""-12TFFOUOTD2yy$... 3s   Ac                    > U R                  5       S:X  a  [        S5      $ US:  S:X  a  [        S5      e[        [        R
                  " U5      5      (       a(  U R                  S   US-
  -  [        U R                  6 -  $ [        TU ]%  U5      $ )NTr   r   r'   )
r   r}   r
   r   r   integerr#   r   r   r*   )r"   r)   r   s     r   r*   OneMatrix._eval_power   s{    <<>T!A;!G*+LMMqyy~::a=S1W-	4::0FFFw"3''r   c                 B    [        U R                  U R                  5      $ r   r   r.   r/   r!   s    r   r0   OneMatrix._eval_transpose      DII..r   c                 B    [        U R                  U R                  5      $ r   r   r!   s    r   r4   OneMatrix._eval_adjoint  r   r   c                 <    [         R                  U R                  -  $ r   )r   r   r/   r!   s    r   r9   OneMatrix._eval_trace  s    uuTYYr   c                 X    U R                   n[        US   S5      [        US   S5      -  $ )z-Returns true if the matrix is known to be 1x1r   r   )r#   r   )r"   r#   s     r   r   OneMatrix._is_1x1  s*    

%(AE!Ha00r   c                     U R                  5       nUS:X  a  [        R                  $ US:X  a  [        R                  $ SSKJn  U" U 5      $ )NTFr   )Determinant)r   r   r   r8   &sympy.matrices.expressions.determinantr   )r"   r   r   s      r   r=   OneMatrix._eval_determinant  s=    LLN	55L%66MJt$$r   c                     U R                  5       nUS:X  a  [        S5      $ US:X  a  [        S5      eSSKJn  U" U 5      $ )NTr   Fr@   )Inverse)r   r}   r
   inverser   )r"   r   r   s      r   rA   OneMatrix._eval_inverse  s@    LLN	A;%*+MNN(4= r   c                 *    U [        U R                  6 4$ r   r   r!   s    r   rE   OneMatrix._eval_as_real_imag$  r   r   c                     U $ r   rD   r!   s    r   rH   OneMatrix._eval_conjugate'  rJ   r   c                 "    [         R                  $ r   r   rL   s       r   rP   OneMatrix._entry*  r   r   rD   )F)rR   rS   rT   rU   rV   r   rX   r#   r   r   r   r*   r0   r4   r9   r   r=   rA   rE   rH   rP   rY   rZ   r[   s   @r   r   r      sv       & &6/(//1
%!/ r   r   N)sympy.assumptions.askr   r   sympy.core.relationalr   sympy.core.singletonr   sympy.core.sympifyr   (sympy.functions.special.tensor_functionsr   sympy.matrices.exceptionsr
   matexprr   r   r]   r}   r   r   rD   r   r   <module>r      s^    ( $ " ' C > 7 7t "
  "HCz CL$"h $"NV
 Vr   