§
    OŠtj_  ã                   óv   — d dl mZ d dl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  G d„ de¦  «        Zd	S )
é    )ÚExprBuilder)ÚFunctionÚFunctionClassÚLambda)ÚDummy)ÚsympifyÚ_sympify)Ú
MatrixExpr)Ú
MatrixBasec                   ó~   — e Zd ZdZd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zd„ ZdS )ÚElementwiseApplyFunctionag  
    Apply function to a matrix elementwise without evaluating.

    Examples
    ========

    It can be created by calling ``.applyfunc(<function>)`` on a matrix
    expression:

    >>> from sympy import MatrixSymbol
    >>> from sympy.matrices.expressions.applyfunc import ElementwiseApplyFunction
    >>> from sympy import exp
    >>> X = MatrixSymbol("X", 3, 3)
    >>> X.applyfunc(exp)
    Lambda(_d, exp(_d)).(X)

    Otherwise using the class constructor:

    >>> from sympy import eye
    >>> expr = ElementwiseApplyFunction(exp, eye(3))
    >>> expr
    Lambda(_d, exp(_d)).(Matrix([
    [1, 0, 0],
    [0, 1, 0],
    [0, 0, 1]]))
    >>> expr.doit()
    Matrix([
    [E, 1, 1],
    [1, E, 1],
    [1, 1, E]])

    Notice the difference with the real mathematical functions:

    >>> exp(eye(3))
    Matrix([
    [E, 0, 0],
    [0, E, 0],
    [0, 0, E]])
    c                 óî  — t          |¦  «        }|j        s"t          d                     |¦  «        ¦  «        ‚|j        dk    r" ||¦  «        }t          |t          ¦  «        r|S t          |t          t          f¦  «        s(t          d¦  «        }t          | ||¦  «        ¦  «        }t          |¦  «        }t          |t          t          f¦  «        s"t          d                     |¦  «        ¦  «        ‚d|j        vr"t          d                     |¦  «        ¦  «        ‚t          |t          ¦  «        s(t          d¦  «        }t          | ||¦  «        ¦  «        }t          j        | ||¦  «        }|S )Nz{} must be a matrix instance.)é   r   Údz4{} should be compatible with SymPy function classes.r   z({} should be able to accept 1 arguments.)r	   Ú	is_MatrixÚ
ValueErrorÚformatÚshapeÚ
isinstancer
   r   r   r   r   ÚnargsÚ__new__)ÚclsÚfunctionÚexprÚretr   Úobjs         úb/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/matrices/expressions/applyfunc.pyr   z ElementwiseApplyFunction.__new__2   sk  € Ý˜‰~Œ~ˆØŒ~ð 	KÝÐ<×CÒCÀDÑIÔIÑJÔJÐJàŒ:˜ÒÐð �(˜4‘.”.ˆCÝ˜#�zÑ*Ô*ð Ø�
å˜(¥]µFÐ$;Ñ<Ô<ð 	.Ý�c‘
”
ˆAÝ˜a  ¨!¡¤Ñ-Ô-ˆHå˜8Ñ$Ô$ˆÝ˜(¥]µFÐ$;Ñ<Ô<ð 	#ÝØFß’˜Ñ!Ô!ñ#ô #ð #ð �H”NÐ"Ð"ÝØ:×AÒAÀ(ÑKÔKñMô Mð Mõ ˜(¥FÑ+Ô+ð 	.Ý�c‘
”
ˆAÝ˜a  ¨!¡¤Ñ-Ô-ˆHåÔ   h°Ñ5Ô5ˆØˆ
ó    c                 ó   — | j         d         S )Nr   ©Úargs©Úselfs    r   r   z!ElementwiseApplyFunction.functionS   ó   € àŒy˜Œ|Ðr   c                 ó   — | j         d         S )Nr   r    r"   s    r   r   zElementwiseApplyFunction.exprW   r$   r   c                 ó   — | j         j        S ©N)r   r   r"   s    r   r   zElementwiseApplyFunction.shape[   s   € àŒyŒÐr   c                 ó|  ‡ ‡— |                      dd¦  «        }‰ j        Š|r ‰j        di |¤ŽŠ‰ j        }t	          |t
          ¦  «        r	|j        r‰S t	          ‰t          ¦  «        r‰                     ‰ j        ¦  «        S t	          ‰t          ¦  «        r$ t          ˆˆ fd„‰j        ¦  «        j        di |¤ŽS ‰ S )NÚdeepTc                 óT   •— ‰                      ‰                      | ¦  «        ¦  «        S r'   )r   )Úxr   r#   s    €€r   ú<lambda>z/ElementwiseApplyFunction.doit.<locals>.<lambda>l   s   ø€ ˜$Ÿ-š-¨¯ª°aÑ(8Ô(8Ñ9Ô9€ r   © )
Úgetr   Údoitr   r   r   Úis_identityr   Ú	applyfuncr   )r#   Úhintsr)   r   r   s   `   @r   r/   zElementwiseApplyFunction.doit_   sî   øø€ Ø�yŠy˜ Ñ&Ô&ˆØŒyˆØð 	&Ø�4”9Ð%Ð%˜uÐ%Ð%ˆDØ”=ˆÝ�h¥Ñ'Ô'ð 	¨HÔ,@ð 	àˆKÝ�d�JÑ'Ô'ð 	Ø—>’> $¤-Ñ0Ô0Ð0Ý˜Õ6Ñ7Ô7ð 	ðÕ+Ø9Ð9Ð9Ð9Ð9Ø”	ñô ô ðð ð ðð ð ð
 ˆKr   c                 óP   — |                        | j        j        ||fi |¤Ž¦  «        S r'   )r   r   Ú_entry)r#   ÚiÚjÚkwargss       r   r4   zElementwiseApplyFunction._entryr   s.   € Ø�}Š}Ð-˜TœYÔ-¨a°Ð=Ð=°fÐ=Ð=Ñ>Ô>Ð>r   c                 óâ   — t          d¦  «        }|                      |¦  «        }|                     |¦  «        }t          |t          ¦  «        rt          |¦  «        }nt          ||¦  «        }|S )Nr   )r   r   Údiffr   r   Útyper   )r#   r   r   Úfdiffs       r   Ú_get_function_fdiffz,ElementwiseApplyFunction._get_function_fdiffu   sb   € Ý�#‰JŒJˆØ—=’= Ñ#Ô#ˆØ—’˜aÑ Ô ˆÝ�e�XÑ&Ô&ð 	%Ý˜‘K”KˆEˆEå˜1˜eÑ$Ô$ˆEØˆr   c                 ó¨   — ddl m} | j                             |¦  «        }|                      ¦   «         } ||t          || j        ¦  «        ¦  «        S )Nr   )Úhadamard_product)Ú#sympy.matrices.expressions.hadamardr>   r   r9   r<   r   )r#   r+   r>   Údexprr;   s        r   Ú_eval_derivativez)ElementwiseApplyFunction._eval_derivative   s_   € ØHÐHÐHÐHÐHÐHØ”	—’˜qÑ!Ô!ˆØ×(Ò(Ñ*Ô*ˆØÐØÝ$ U¨D¬IÑ6Ô6ñ
ô 
ð 	
r   c                 óº  — ddl m} ddlm} ddlm} ddlm} |                      ¦   «         }| j                             |¦  «        }t          || j        ¦  «        }d|j
        v rÆ| j
        d         dk    }	|D ]±}
|	r|
j        } || j
        d         ¦  «        }n || j
        d         ¦  «        }|
j        }t          |t          ||||g¦  «        |	rdndg|j        ¬	¦  «        }|g|
_        |j        d         j        |
_        d|
_        |j        d         j        |
_        d
|
_        Œ²n°|D ]­}
|
j        }|
j        } ||j
        d         ¦  «        } ||j
        d         ¦  «        }t          |t          ||||||g¦  «        ddg|j        ¬	¦  «        }|j        d         j        |
_        d|
_        |j        d         j        |
_        d|
_        |g|
_        Œ®|S )Nr   )ÚIdentity)ÚArrayContraction)ÚArrayDiagonal)ÚArrayTensorProductr   )r   é   )r   é   )Ú	validatorrG   )r   rG   rH   )é   é   é   rH   )Ú"sympy.matrices.expressions.specialrC   Ú0sympy.tensor.array.expressions.array_expressionsrD   rE   rF   r<   r   Ú_eval_derivative_matrix_linesr   r   Úfirst_pointerÚsecond_pointerr   Ú	_validateÚ_linesr!   Ú_first_pointer_parentÚ_first_pointer_indexÚ_second_pointer_parentÚ_second_pointer_index)r#   r+   rC   rD   rE   rF   r;   ÚlrÚewdiffÚiscolumnr5   Úptr1Úptr2ÚsubexprÚnewptr1Únewptr2s                   r   rO   z6ElementwiseApplyFunction._eval_derivative_matrix_linesˆ   s[  € Ø?Ð?Ð?Ð?Ð?Ð?ØUÐUÐUÐUÐUÐUØRÐRÐRÐRÐRÐRØWÐWÐWÐWÐWÐWà×(Ò(Ñ*Ô*ˆØŒY×4Ò4°QÑ7Ô7ˆÝ)¨%°´Ñ;Ô;ˆØ�”ˆ<ˆ<à”z !”}¨Ò)ˆHØð ,ð ,�Øð ,Øœ?�DØ#˜8 D¤J¨q¤MÑ2Ô2�D�Dà#˜8 D¤J¨q¤MÑ2Ô2�DØÔ+�Då%Ø!å#Ø.à &Ø $Ø $ðñô ð #+Ð6˜˜°ð
ð ,Ô5ðñ ô �ð $˜9�”Ø*1¬,°q¬/Ô*>�Ô'Ø)*�Ô&Ø+2¬<¸¬?Ô+?�Ô(Ø*+�Ô'Ð'ð7,ð< ð %ð %�Ø”�ØÔ'�Ø"˜( 4¤:¨a¤=Ñ1Ô1�Ø"˜( 4¤:¨a¤=Ñ1Ô1�Ý%Ø$å#Ø.Ø! 7¨F°D¸'ÐBñô ð "Ø!ðð /Ô8ðñ ô �ð +2¬,°q¬/Ô*>�Ô'Ø)*�Ô&Ø+2¬<¸¬?Ô+?�Ô(Ø*+�Ô'Ø#˜9�”�Øˆ	r   c                 ó„   — ddl m} |                      | j         || j        ¦  «                             ¦   «         ¦  «        S )Nr   )Ú	Transpose)Ú$sympy.matrices.expressions.transposera   Úfuncr   r   r/   )r#   ra   s     r   Ú_eval_transposez(ElementwiseApplyFunction._eval_transposeÊ   sB   € ØBÐBÐBÐBÐBÐBØ�yŠy˜œ¨	¨	°$´)Ñ(<Ô(<×(AÒ(AÑ(CÔ(CÑDÔDÐDr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   r   r   r/   r4   r<   rA   rO   rd   r-   r   r   r   r   	   sã   € € € € € ð&ð &ðPð ð ðB ðð ñ „Xðð ðð ñ „Xðð ðð ñ „Xððð ð ð&?ð ?ð ?ðð ð ð
ð 
ð 
ð@ð @ð @ðDEð Eð Eð Eð Er   r   N)Úsympy.core.exprr   Úsympy.core.functionr   r   r   Úsympy.core.symbolr   Úsympy.core.sympifyr   r	   Úsympy.matrices.expressionsr
   Úsympy.matrices.matrixbaser   r   r-   r   r   ú<module>rp      sË   ðØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ #Ð #Ð #Ð #Ð #Ð #Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ðCEð CEð CEð CEð CE˜zñ CEô CEð CEð CEð CEr   