Ë
    7^(h_  ã                   ón   — 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y	)
é    )ÚExprBuilder)ÚFunctionÚFunctionClassÚLambda)ÚDummy)ÚsympifyÚ_sympify)Ú
MatrixExpr)Ú
MatrixBasec                   ój   — 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y)Ú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                 ón  — t        |«      }|j                  st        dj                  |«      «      ‚|j                  dk(  r ||«      }t        |t        «      r|S t        |t        t        f«      st        d«      }t        | ||«      «      }t        |«      }t        |t        t        f«      st        dj                  |«      «      ‚d|j                  vrt        dj                  |«      «      ‚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/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/matrices/expressions/applyfunc.pyr   z ElementwiseApplyFunction.__new__2   s  € Ü˜‹~ˆØ�~Š~ÜÐ<×CÑCÀDÓIÓJÐJà�:‰:˜Òñ ˜4“.ˆCÜ˜#œzÔ*Ø�
ä˜(¤]´FÐ$;Ô<Ü�c“
ˆAÜ˜a¡¨!£Ó-ˆHä˜8Ó$ˆÜ˜(¤]´FÐ$;Ô<ÜØFß‘˜Ó!ó#ð #ð �H—N‘NÑ"ÜØ:×AÑAÀ(ÓKóMð Mô ˜(¤FÔ+Ü�c“
ˆAÜ˜a¡¨!£Ó-ˆHä× Ñ   h°Ó5ˆØˆ
ó    c                 ó    — | j                   d   S )Nr   ©Úargs©Úselfs    r   r   z!ElementwiseApplyFunction.functionS   ó   € à�y‰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‰y�‰Ðr   c                 óŒ  ‡ ‡— |j                  dd«      }‰ j                  Š|r ‰j                  di |¤ŽŠ‰ j                  }t	        |t
        «      r|j                  r‰S t	        ‰t        «      r‰j                  ‰ j                  «      S t	        ‰t        «      r* t        ˆˆ fd„‰j                  «      j                  di |¤ŽS ‰ S )NÚdeepTc                 óD   •— ‰j                  ‰j                  | «      «      S r'   )r   )Úxr   r#   s    €€r   ú<lambda>z/ElementwiseApplyFunction.doit.<locals>.<lambda>l   s   ø€ ˜$Ÿ-™-¨¯©°aÓ(8Ó9€ r   © )
Úgetr   Údoitr   r   r   Úis_identityr   Ú	applyfuncr   )r#   Úhintsr)   r   r   s   `   @r   r/   zElementwiseApplyFunction.doit_   s³   ù€ Ø�y‰y˜ Ó&ˆØ�y‰yˆÙØ�4—9‘9Ñ%˜uÑ%ˆDØ—=‘=ˆÜ�h¤Ô'¨H×,@Ò,@àˆKÜ�dœJÔ'Ø—>‘> $§-¡-Ó0Ð0Ü˜Ô6Ô7ðÔ+Ü9Ø—	‘	ó÷ ‰dñð ñð ð
 ˆKr   c                 ó\   — | j                   | j                  j                  ||fi |¤Ž«      S r'   )r   r   Ú_entry)r#   ÚiÚjÚkwargss       r   r4   zElementwiseApplyFunction._entryr   s*   € Ø�}‰}Ð-˜TŸY™Y×-Ñ-¨a°Ñ=°fÑ=Ó>Ð>r   c                 ó²   — t        d«      }| j                  |«      }|j                  |«      }t        |t        «      rt        |«      }|S t        ||«      }|S )Nr   )r   r   Údiffr   r   Útyper   )r#   r   r   Úfdiffs       r   Ú_get_function_fdiffz,ElementwiseApplyFunction._get_function_fdiffu   sT   € Ü�#‹JˆØ—=‘= Ó#ˆØ—‘˜aÓ ˆÜ�eœXÔ&Ü˜“KˆEð ˆô ˜1˜eÓ$ˆEØˆr   c                 óž   — ddl m} | j                  j                  |«      }| 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   sC   € ÝHØ—	‘	—‘˜qÓ!ˆØ×(Ñ(Ó*ˆÙØÜ$ U¨D¯I©IÓ6ó
ð 	
r   c                 ó  — ddl m} ddlm} ddlm} ddlm} | j                  «       }| j                  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
|
_        ŒÆ |S |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ÝRÝWà×(Ñ(Ó*ˆØ�Y‰Y×4Ñ4°QÓ7ˆÜ)¨%°·±Ó;ˆØ�—‘‰<à—z‘z !‘}¨Ñ)ˆHØò ,�ÙØŸ?™?�DÙ# D§J¡J¨q¡MÓ2‘Dá# D§J¡J¨q¡MÓ2�DØ×+Ñ+�Dä%Ø!ä#Ø.à &Ø $Ø $ðóñ #+™°ð
ð ,×5Ñ5ô�ð $˜9�”Ø*1¯,©,°q©/×*>Ñ*>�Ô'Ø)*�Ô&Ø+2¯<©<¸©?×+?Ñ+?�Ô(Ø*+�Õ'ð7,ðh ˆ	ð- ò %�Ø—‘�Ø×'Ñ'�Ù" 4§:¡:¨a¡=Ó1�Ù" 4§:¡:¨a¡=Ó1�Ü%Ø$ä#Ø.Ø! 7¨F°D¸'ÐBóð "Ø!ðð /×8Ñ8ô�ð +2¯,©,°q©/×*>Ñ*>�Ô'Ø)*�Ô&Ø+2¯<©<¸©?×+?Ñ+?�Ô(Ø*+�Ô'Ø#˜9�•ð+%ð, ˆ	r   c                 ó‚   — ddl m} | j                  | j                   || j                  «      j                  «       «      S )Nr   )Ú	Transpose)Ú$sympy.matrices.expressions.transposera   Úfuncr   r   r/   )r#   ra   s     r   Ú_eval_transposez(ElementwiseApplyFunction._eval_transposeÊ   s,   € ÝBØ�y‰y˜Ÿ™©	°$·)±)Ó(<×(AÑ(AÓ(CÓDÐDr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   r   r   r/   r4   r<   rA   rO   rd   r-   r   r   r   r   	   sk   „ ñ&òPðB ñó ðð ñó ðð ñó ðòò&?òò
ò@óD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Ý #ß 0Ý 1Ý 0ôCE˜zõ CEr   