
    \h_                     n    S SK Jr  S SK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\5      rg	)
    )ExprBuilder)FunctionFunctionClassLambda)Dummy)sympify_sympify)
MatrixExpr)
MatrixBasec                   r    \ rS rSrSrS r\S 5       r\S 5       r\S 5       r	S r
S rS	 rS
 rS rS rSrg)ElementwiseApplyFunction	   a  
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                    [        U5      nUR                  (       d  [        SR                  U5      5      eUR                  S:X  a  U" U5      n[        U[        5      (       a  U$ [        U[        [        45      (       d  [        S5      n[        XA" U5      5      n[        U5      n[        U[        [        45      (       d  [        SR                  U5      5      eSUR                  ;  a  [        SR                  U5      5      e[        U[        5      (       d  [        S5      n[        XA" U5      5      n[        R                  " XU5      nU$ )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         \/var/www/auris/envauris/lib/python3.13/site-packages/sympy/matrices/expressions/applyfunc.pyr    ElementwiseApplyFunction.__new__2   s   ~~~<CCDIJJ:: 4.C#z**
(]F$;<<c
Aa!-H8$(]F$;<<F!# # HNN":AA(KM M (F++c
Aa!-H  5
    c                      U R                   S   $ )Nr   argsselfs    r   r   !ElementwiseApplyFunction.functionS       yy|r    c                      U R                   S   $ )Nr   r"   r$   s    r   r   ElementwiseApplyFunction.exprW   r'   r    c                 .    U R                   R                  $ N)r   r   r$   s    r   r   ElementwiseApplyFunction.shape[   s    yyr    c                   ^ ^ UR                  SS5      nT R                  mU(       a  TR                  " S0 UD6mT R                  n[	        U[
        5      (       a  UR                  (       a  T$ [	        T[        5      (       a  TR                  T R                  5      $ [	        T[        5      (       a+  [        UU 4S jTR                  5      R                  " S0 UD6$ T $ )NdeepTc                 D   > TR                  TR                  U 5      5      $ r+   )r   )xr   r%   s    r   <lambda>/ElementwiseApplyFunction.doit.<locals>.<lambda>l   s    $--a(89r     )
getr   doitr   r   r   is_identityr   	applyfuncr   )r%   hintsr.   r   r   s   `   @r   r5   ElementwiseApplyFunction.doit_   s    yy&yy99%u%D==h''H,@,@KdJ''>>$--00677+9		 d   
 Kr    c                 Z    U R                  U R                  R                  " X40 UD65      $ r+   )r   r   _entry)r%   ijkwargss       r   r;   ElementwiseApplyFunction._entryr   s%    }}TYY--a=f=>>r    c                     [        S5      nU R                  U5      nUR                  U5      n[        U[        5      (       a  [        U5      nU$ [        X5      nU$ )Nr   )r   r   diffr   r   typer   )r%   r   r   fdiffs       r   _get_function_fdiff,ElementwiseApplyFunction._get_function_fdiffu   sU    #J==#a eX&&KE  1$Er    c                     SSK Jn  U R                  R                  U5      nU R	                  5       nU" U[        X@R                  5      5      $ )Nr   )hadamard_product)#sympy.matrices.expressions.hadamardrG   r   rA   rD   r   )r%   r0   rG   dexprrC   s        r   _eval_derivative)ElementwiseApplyFunction._eval_derivative   sA    H		q!((*$UII6
 	
r    c                 &   SSK Jn  SSKJn  SSKJn  SSKJn  U R                  5       nU R                  R                  U5      n[        X`R                  5      nSUR                  ;   a  U R                  S   S:H  n	U H  n
U	(       a"  U
R                  nU" U R                  S   5      nO!U" U R                  S   5      nU
R                  n[        U[        UUUU/5      U	(       a  SOS/UR                  S	9nU/U
l        UR                   S   R                   U
l        SU
l        UR                   S   R                   U
l        S
U
l        M     U$ U H  n
U
R                  nU
R                  nU" UR                  S   5      nU" UR                  S   5      n[        U[        UXXU/5      SS/UR                  S	9nUR                   S   R                   U
l        SU
l        UR                   S   R                   U
l        SU
l        U/U
l        M     U$ )Nr   )Identity)ArrayContraction)ArrayDiagonal)ArrayTensorProductr   )r      )r      )	validatorrQ   )r   rQ   rR   )         rR   )"sympy.matrices.expressions.specialrM   0sympy.tensor.array.expressions.array_expressionsrN   rO   rP   rD   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%   r0   rM   rN   rO   rP   rC   lrewdiffiscolumnr<   ptr1ptr2subexprnewptr1newptr2s                   r   rY   6ElementwiseApplyFunction._eval_derivative_matrix_lines   s   ?URW((*YY44Q7)%;<zz!})H??D#DJJqM2D#DJJqM2D++D%!#. & $ $ #+
 ,55 $9*1,,q/*>*>')*&+2<<?+?+?(*+'7 h 	- ''"4::a=1"4::a=1%$#.!F'B "! /88 +2,,q/*>*>')*&+2<<?+?+?(*+'#9+ , 	r    c                     SSK Jn  U R                  U R                  U" U R                  5      R                  5       5      $ )Nr   )	Transpose)$sympy.matrices.expressions.transposerl   funcr   r   r5   )r%   rl   s     r   _eval_transpose(ElementwiseApplyFunction._eval_transpose   s,    Byy	$))(<(A(A(CDDr    r3   N)__name__
__module____qualname____firstlineno____doc__r   propertyr   r   r   r5   r;   rD   rJ   rY   ro   __static_attributes__r3   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   r3   r    r   <module>r~      s*    ' A A # 0 1 0CEz CEr    