§
    OŠtj¥  ã                   ó°  — 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/CA-Chatbot/venv/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¸Ñ=Ô=Ñ>Ô>ˆØð 	,Ý��G TÑ*Ô*Ñ+Ô+ˆDåÐ?Ð?¸$Ð?Ñ?Ô?Ñ?Ô?ð 	@ÝÐ>Ñ?Ô?Ð?åŒm˜CÐ' $Ð'Ð'Ð'ˆàÐÝ%ØsØ)/Ø+Yð[ñ [ô [ð [ð
 ˜ÐÐÝ�dˆOˆOàð 	%Ø—-’- Ñ$Ô$ˆ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ÐE°C�Z�S”Z  1Ð/Ð/¨Ð/Ð/ÐEÐEÐEr*   )r   r;   )rD   r&   rQ   rK   s    ```r(   rP   zMatAdd._entryR   s-   øøø€ ÝÐEÐEÐEÐEÐEÐE¸4¼9Ð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Ð5 C�U�U˜3‘Z”ZÐ5Ð5Ð5r*   )r]   r   r;   rV   )rD   r]   s    @r(   Ú_eval_tracezMatAdd._eval_trace[   sC   ø€ Ø Ð Ð Ð Ð Ð ÝÐ5Ð5Ð5Ð5¨4¬9Ð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+   ø€ Ð;Ð;Ð;¨#�H�C”HÐ%Ð%˜uÐ%Ð%Ð;Ð;Ð;r*   )Úgetr;   r>   r   )rD   rc   ra   r;   s    `  r(   rV   zMatAdd.doit_   sT   ø€ Ø�yŠy˜ Ñ&Ô&ˆØð 	Ø;Ð;Ð;Ð;°´Ð;Ñ;Ô;ˆDˆDà”9ˆDÝ�F D˜MÑ*Ô*Ð*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ÐO¸c�S×6Ò6°qÑ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Ð0�a¨aÐ0Ð0¨�Ð0Ð0Ð0Ð0r*   )r;   )rD   rh   Ú	add_liness    ` r(   rg   z$MatAdd._eval_derivative_matrix_linesg   s2   ø€ ØOÐOÐOÐOÀTÄYÐOÑOÔOˆ	Ø0Ð0˜9Ð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Ô2°1Ô5Ñ6Ô6€ r*   c                 ó   — | dk    r|S | |z  S rw   rH   )ÚcntÚmats     r(   Úcombiner{   p   s   € Ø
ˆa‚x€xØˆ
à�S‰yÐ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ÔG€FÝ
ˆ6�$Œ<ÑÔ˜1ÒÐÝ˜˜uœ­µ´¸fÀT¼lÑ)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1ˆZ˜ñ V1ô V1ð V1ðp €Ô ˜3 ˜-¨Ñ 0Ô 0Ð 0ð /Ð.€	Ø6Ð6€	ðð ð ðð ð ð8 
ˆÐ<Ð<Ñ	=Ô	=Ø	Ø	Ø	ˆˆi˜ GÑ	,Ô	,Ø	Ø	ˆÐÑ	Ô	ð	!€ð ˆw�y�yÐ!@Ð!@Ø!' ¨ ñ1ô 1ñ 2ô 2€€€r*   