
    \h                        S SK Jr  S SKrS SKJrJr  S SKJr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JrJrJrJrJrJrJr  S S
KJr  S SKJrJr  S SK J!r"  S SK#J$r$  S SK%J&r&   " S S\\5      r'\RP                  " \\'4\'5        S r)S r*S r+S r,\" S 5      \\\" \*\)\+5      \,\" \5      4r-\" \" S \" \-6 5      5      r.g)    )reduceN)Basicsympify)addAdd_could_extract_minus_sign)default_sort_key)adjoint)
MatrixBase)	transpose)rm_idunpackflattensort	conditionexhaustdo_oneglom)
MatrixExpr)
ZeroMatrixGenericZeroMatrix)validate_matadd_integer)sift)sympy_deprecation_warningc                      ^  \ rS rSrSrSr\" 5       rSSSS.S jr\	S 5       r
\S	 5       rS
 rU 4S jrS rS rS rS rS rS rSrU =r$ )MatAdd   a  A Sum of Matrix Expressions

MatAdd inherits from and operates like SymPy Add

Examples
========

>>> from sympy import MatAdd, MatrixSymbol
>>> A = MatrixSymbol('A', 5, 5)
>>> B = MatrixSymbol('B', 5, 5)
>>> C = MatrixSymbol('C', 5, 5)
>>> MatAdd(A, B, C)
A + B + C
TFN)evaluatecheck_sympifyc                x  ^  U(       d  T R                   $ [        [        U 4S jU5      5      nU(       a  [        [        [        U5      5      n[        S U 5       5      (       d  [        S5      e[        R                  " T /UQ76 nUb  [        SSSS9  USLa  [        U6   U(       a  T R                  U5      nU$ )	Nc                 "   > TR                   U :g  $ N)identity)iclss    Y/var/www/auris/envauris/lib/python3.13/site-packages/sympy/matrices/expressions/matadd.py<lambda> MatAdd.__new__.<locals>.<lambda>,   s    S\\Q%6    c              3   B   #    U  H  n[        U[        5      v   M     g 7fr#   )
isinstancer   ).0args     r'   	<genexpr>!MatAdd.__new__.<locals>.<genexpr>0   s     ?$3:c:..$s   z Mix of Matrix and Scalar symbolszaPassing check to MatAdd is deprecated and the check argument will be removed in a future version.z1.11z,remove-check-argument-from-matrix-operations)deprecated_since_versionactive_deprecations_targetF)r$   listfiltermapr   all	TypeErrorr   __new__r   validate	_evaluate)r&   r   r   r    argsobjs   `     r'   r8   MatAdd.__new__&   s    << F6=>GT*+D?$???>??mmC'$'%s)/+Y[
 dO--$C
r*   c                     [        U5      $ r#   )canonicalize)r&   exprs     r'   r:   MatAdd._evaluateC   s    D!!r*   c                 4    U R                   S   R                  $ Nr   )r;   shapeselfs    r'   rD   MatAdd.shapeG   s    yy|!!!r*   c                     [        U 5      $ r#   )r   rE   s    r'   could_extract_minus_signMatAdd.could_extract_minus_signK   s    (..r*   c                 N   > [         [        U ]
  " S0 UD6nU R                  U5      $ )N )superr   expandr:   )rF   kwargsexpanded	__class__s      r'   rN   MatAdd.expandN   s&    -77~~h''r*   c           
      r    [        U R                   Vs/ s H  oDR                  " X40 UD6PM     sn6 $ s  snf r#   )r   r;   _entry)rF   r%   jrO   r.   s        r'   rT   MatAdd._entryR   s/    499E9CZZ//9EFFEs   4c                     [        U R                   Vs/ s H  n[        U5      PM     sn6 R                  5       $ s  snf r#   )r   r;   r   doitrF   r.   s     r'   _eval_transposeMatAdd._eval_transposeU   s0    $))<)3	#)<=BBDD<   ;c                     [        U R                   Vs/ s H  n[        U5      PM     sn6 R                  5       $ s  snf r#   )r   r;   r
   rX   rY   s     r'   _eval_adjointMatAdd._eval_adjointX   s0    		:		:;@@BB:r\   c                     SSK J n  [        U R                   Vs/ s H
  o!" U5      PM     sn6 R                  5       $ s  snf )N   )trace)rb   r   r;   rX   )rF   rb   r.   s      r'   _eval_traceMatAdd._eval_trace[   s3     49959CU3Z956;;==5s   =c                     UR                  SS5      nU(       a,  U R                   Vs/ s H  o3R                  " S0 UD6PM     nnOU R                  n[        [	        U6 5      $ s  snf )NdeepTrL   )getr;   rX   r?   r   )rF   hintsrf   r.   r;   s        r'   rX   MatAdd.doit_   sV    yy&15;#HH%u%D;D99DFDM** <s   A#c                     U R                    Vs/ s H  o"R                  U5      PM     nnU VVs/ s H  oD  H  oUPM     M     snn$ s  snf s  snnf r#   )r;   _eval_derivative_matrix_lines)rF   xr.   	add_linesr%   rU   s         r'   rk   $MatAdd._eval_derivative_matrix_linesg   sI    EIYYOYc66q9Y	O$09aaa900 P0s
   AArL   )__name__
__module____qualname____firstlineno____doc__	is_MatAddr   r$   r8   classmethodr:   propertyrD   rI   rN   rT   rZ   r^   rc   rX   rk   __static_attributes____classcell__)rQ   s   @r'   r   r      s{     I "H%*$ : " " " "/(GEC>+1 1r*   r   c                 (    U R                  5       S   $ rC   )as_coeff_mmulr.   s    r'   r(   r(   n   s    ))+A.r*   c                 :    [        U R                  5       S   5      $ Nra   )r   rz   r{   s    r'   r(   r(   o   s    s002156r*   c                     U S:X  a  U$ X-  $ r}   rL   )cntmats     r'   combiner   p   s    
ax
yr*   c                     [        U R                  S 5      n[        US   5      S:  a*  [        US   [	        [
        R                  US   5      /-   6 $ U $ )a  Merge explicit MatrixBase arguments

Examples
========

>>> from sympy import MatrixSymbol, eye, Matrix, MatAdd, pprint
>>> from sympy.matrices.expressions.matadd import merge_explicit
>>> A = MatrixSymbol('A', 2, 2)
>>> B = eye(2)
>>> C = Matrix([[1, 2], [3, 4]])
>>> X = MatAdd(A, B, C)
>>> pprint(X)
    [1  0]   [1  2]
A + [    ] + [    ]
    [0  1]   [3  4]
>>> pprint(merge_explicit(X))
    [2  2]
A + [    ]
    [3  5]
c                 "    [        U [        5      $ r#   )r,   r   r{   s    r'   r(    merge_explicit.<locals>.<lambda>   s    :c:+Fr*   Tra   F)r   r;   lenr   r   operatorr   )mataddgroupss     r'   merge_explicitr   w   sQ    * &++FGF
6$<1ufTl)K(LLNNr*   c                 :    U S:H  =(       d    [        U [        5      $ rC   )r,   r   rl   s    r'   r(   r(      s    a<:a#<<r*   c                 "    [        U [        5      $ r#   )r,   r   r   s    r'   r(   r(      s    :a+@r*   )/	functoolsr   r   
sympy.corer   r   sympy.core.addr   r   r   sympy.core.sortingr	   sympy.functionsr
   sympy.matrices.matrixbaser   $sympy.matrices.expressions.transposer   sympy.strategiesr   r   r   r   r   r   r   r   "sympy.matrices.expressions.matexprr   "sympy.matrices.expressions.specialr   r   !sympy.matrices.expressions._shaper   r9   sympy.utilities.iterablesr   sympy.utilities.exceptionsr   r   register_handlerclass	factor_of	matrix_ofr   r   rulesr?   rL   r*   r'   <module>r      s      % > > / # 0 :   9 L Q * @V1Z V1p   3- 0 /	6	8 
<	=			iG	,				! y!@!'1 2r*   