
    g                        d dl mZ d dlZd dlmZmZ d dlmZ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mZmZmZmZmZmZmZ d d
lmZ d dlmZmZ d dl m!Z" d dl#m$Z$ d dl%m&Z&  G d dee          Z' ej(        ee'fe'           d Z)d Z*d Z+d Z, ed           ee ee*e)e+          e, ee          fZ- e ed  ee-                     Z.dS )    )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                        e Zd ZdZdZ e            ZdddddZed             Z	e
d             Zd	 Z fd
Zd Zd Zd Zd Zd Zd Z xZS )MatAdda3  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                    |s j         S t          t           fd|                    }|r"t          t          t          |                    }t          d |D                       st          d          t          j         g|R  }|t          ddd           |dur	t          |  |r                     |          }|S )	Nc                     j         | k    S N)identity)iclss    ]/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/matrices/expressions/matadd.py<lambda>z MatAdd.__new__.<locals>.<lambda>,   s    S\Q%6     c              3   @   K   | ]}t          |t                    V  d S r$   )
isinstancer   .0args     r(   	<genexpr>z!MatAdd.__new__.<locals>.<genexpr>0   s,      ??3:c:..??????r*   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   zMatAdd.__new__&   s     	 < F6666==>> 	,GT**++D??$????? 	@>???mC'$'''%s)/+Y[ [ [ [
 dOO 	%--$$C
r*   c                      t          |          S r$   )canonicalize)r'   exprs     r(   r:   zMatAdd._evaluateC   s    D!!!r*   c                 &    | j         d         j        S Nr   )r;   shapeselfs    r(   rB   zMatAdd.shapeG   s    y|!!r*   c                      t          |           S r$   )r   rC   s    r(   could_extract_minus_signzMatAdd.could_extract_minus_signK   s    (...r*   c                 n     t          t          |           j        di |}|                     |          S )N )superr   expandr:   )rD   kwargsexpanded	__class__s      r(   rJ   zMatAdd.expandN   s7    -5&&-7777~~h'''r*   c                 @    t          fd| j        D              S )Nc                 .    g | ]} |j         fi S rH   )_entry)r.   r/   r&   jrK   s     r(   
<listcomp>z!MatAdd._entry.<locals>.<listcomp>S   s/    EEECZSZ1////EEEr*   )r   r;   )rD   r&   rQ   rK   s    ```r(   rP   zMatAdd._entryR   s-    EEEEEE49EEEFFr*   c                 V    t          d | j        D                                              S )Nc                 ,    g | ]}t          |          S rH   r   r-   s     r(   rR   z*MatAdd._eval_transpose.<locals>.<listcomp>V   s    <<<3	#<<<r*   r   r;   doitrC   s    r(   _eval_transposezMatAdd._eval_transposeU   s*    <<$)<<<=BBDDDr*   c                 V    t          d | j        D                                              S )Nc                 ,    g | ]}t          |          S rH   r
   r-   s     r(   rR   z(MatAdd._eval_adjoint.<locals>.<listcomp>Y   s    ::::::r*   rU   rC   s    r(   _eval_adjointzMatAdd._eval_adjointX   s*    ::	:::;@@BBBr*   c                 h    ddl m  t          fd| j        D                                              S )N   )tracec                 &    g | ]} |          S rH   rH   )r.   r/   r]   s     r(   rR   z&MatAdd._eval_trace.<locals>.<listcomp>]   s!    555CUU3ZZ555r*   )r]   r   r;   rV   )rD   r]   s    @r(   _eval_tracezMatAdd._eval_trace[   sC          5555495556;;===r*   c                                          dd          }|rfd| j        D             }n| j        }t          t          |           S )NdeepTc                 *    g | ]} |j         d i S )rH   )rV   )r.   r/   hintss     r(   rR   zMatAdd.doit.<locals>.<listcomp>b   s+    ;;;#HCH%%u%%;;;r*   )getr;   r>   r   )rD   rc   ra   r;   s    `  r(   rV   zMatAdd.doit_   sT    yy&& 	;;;;;;;DD9DFDM***r*   c                 B    fd| j         D             }d |D             S )Nc                 :    g | ]}|                               S rH   )_eval_derivative_matrix_lines)r.   r/   xs     r(   rR   z8MatAdd._eval_derivative_matrix_lines.<locals>.<listcomp>h   s'    OOOcS66q99OOOr*   c                     g | ]	}|D ]}|
S rH   rH   )r.   r&   rQ   s      r(   rR   z8MatAdd._eval_derivative_matrix_lines.<locals>.<listcomp>i   s%    000aa000000r*   )r;   )rD   rh   	add_liness    ` r(   rg   z$MatAdd._eval_derivative_matrix_linesg   s2    OOOOTYOOO	0090000r*   )__name__
__module____qualname____doc__	is_MatAddr   r%   r8   classmethodr:   propertyrB   rF   rJ   rP   rW   rZ   r_   rV   rg   __classcell__)rM   s   @r(   r   r      s         I  ""H%*$     : " " [" " " X"/ / /( ( ( ( (G G GE E EC C C> > >+ + +1 1 1 1 1 1 1r*   r   c                 6    |                                  d         S rA   )as_coeff_mmulr/   s    r(   r)   r)   n   s    ))++A. r*   c                 P    t          |                                 d                   S Nr\   )r   rt   ru   s    r(   r)   r)   o   s    s00221566 r*   c                     | dk    r|S | |z  S rw   rH   )cntmats     r(   combiner{   p   s    
axx
Syr*   c                     t          | j        d           }t          |d                   dk    r1t          |d         t	          t
          j        |d                   gz    S | S )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                 ,    t          | t                    S r$   )r,   r   ru   s    r(   r)   z merge_explicit.<locals>.<lambda>   s    :c:+F+F r*   Tr\   F)r   r;   lenr   r   operatorr   )mataddgroupss     r(   merge_explicitr   w   s\    * &+FFGGF
6$<1ufTl)K)K(LLNNr*   c                 8    | dk    pt          | t                    S rA   )r,   r   rh   s    r(   r)   r)      s    a<:a#<#< r*   c                 ,    t          | t                    S 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>   rH   r*   r(   <module>r      sX          % % % % % % % % > > > > > > > > > > / / / / / / # # # # # # 0 0 0 0 0 0 : : : : : :                    9 9 9 9 9 9 L L L L L L L L Q Q Q Q Q Q * * * * * * @ @ @ @ @ @V1 V1 V1 V1 V1Z V1 V1 V1p  3- 0 0 0 /.	66	    8 
<<	=	=			iG	,	,					! wyy!@!@!'1 1 2 2r*   