ó
    ‰*£hÀ  ã                   ón   • S SK Jr  SSK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Jr   " S S	\5      rg
)é   )Ú
MatrixExpré    )ÚFunctionClassÚLambda)ÚDummy)Ú_sympifyÚsympify)ÚMatrix)ÚreÚimc                   ó^   ^ • \ rS rSrSrU 4S jr\S 5       r\S 5       rS r	S r
S rS	rU =r$ )
ÚFunctionMatrixé	   a*  Represents a matrix using a function (``Lambda``) which gives
outputs according to the coordinates of each matrix entries.

Parameters
==========

rows : nonnegative integer. Can be symbolic.

cols : nonnegative integer. Can be symbolic.

lamda : Function, Lambda or str
    If it is a SymPy ``Function`` or ``Lambda`` instance,
    it should be able to accept two arguments which represents the
    matrix coordinates.

    If it is a pure string containing Python ``lambda`` semantics,
    it is interpreted by the SymPy parser and casted into a SymPy
    ``Lambda`` instance.

Examples
========

Creating a ``FunctionMatrix`` from ``Lambda``:

>>> from sympy import FunctionMatrix, symbols, Lambda, MatPow
>>> i, j, n, m = symbols('i,j,n,m')
>>> FunctionMatrix(n, m, Lambda((i, j), i + j))
FunctionMatrix(n, m, Lambda((i, j), i + j))

Creating a ``FunctionMatrix`` from a SymPy function:

>>> from sympy import KroneckerDelta
>>> X = FunctionMatrix(3, 3, KroneckerDelta)
>>> X.as_explicit()
Matrix([
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])

Creating a ``FunctionMatrix`` from a SymPy undefined function:

>>> from sympy import Function
>>> f = Function('f')
>>> X = FunctionMatrix(3, 3, f)
>>> X.as_explicit()
Matrix([
[f(0, 0), f(0, 1), f(0, 2)],
[f(1, 0), f(1, 1), f(1, 2)],
[f(2, 0), f(2, 1), f(2, 2)]])

Creating a ``FunctionMatrix`` from Python ``lambda``:

>>> FunctionMatrix(n, m, 'lambda i, j: i + j')
FunctionMatrix(n, m, Lambda((i, j), i + j))

Example of lazy evaluation of matrix product:

>>> Y = FunctionMatrix(1000, 1000, Lambda((i, j), i + j))
>>> isinstance(Y*Y, MatPow) # this is an expression object
True
>>> (Y**2)[10,10] # So this is evaluated lazily
342923500

Notes
=====

This class provides an alternative way to represent an extremely
dense matrix with entries in some form of a sequence, in a most
sparse way.
c                 óà  >• [        U5      [        U5      p!U R                  U5        U R                  U5        [        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      [        S5      pT[        XE4U" XE5      5      n[        TU ]-  XX#5      $ )Nz4{} should be compatible with SymPy function classes.é   z({} should be able to accept 2 arguments.ÚiÚj)r   Ú
_check_dimr	   Ú
isinstancer   r   Ú
ValueErrorÚformatÚnargsr   ÚsuperÚ__new__)ÚclsÚrowsÚcolsÚlamdar   r   Ú	__class__s         €Úb/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/matrices/expressions/funcmatrix.pyr   ÚFunctionMatrix.__new__P   sÊ   ø€ Ü˜d“^¤X¨d£^ˆdØ�‰�tÔØ�‰�tÔä˜“ˆÜ˜%¤-´Ð!8×9Ñ9ÜØFß‘˜“ó ð  ð �E—K‘KÓÜØ:×AÑAÀ%ÓHóJð Jô ˜%¤×(Ñ(Ü˜“:œu S›zˆqÜ˜A˜6¡5¨£;Ó/ˆEä‰w‰˜s¨$Ó6Ð6ó    c                 ó    • U R                   SS $ )Nr   r   ©Úargs©Úselfs    r    ÚshapeÚFunctionMatrix.shapee   s   € à�y‰y˜˜1ˆ~Ðr"   c                 ó    • U R                   S   $ )Nr   r$   r&   s    r    r   ÚFunctionMatrix.lamdai   s   € à�y‰y˜‰|Ðr"   c                 ó$   • U R                  X5      $ ©N)r   )r'   r   r   Úkwargss       r    Ú_entryÚFunctionMatrix._entrym   s   € Ø�z‰z˜!ÓÐr"   c                 ód   • SSK Jn  SSKJn  U" U 5      R	                  U5      R                  5       $ )Nr   )ÚTrace)ÚSum)Ú sympy.matrices.expressions.tracer2   Úsympy.concrete.summationsr3   ÚrewriteÚdoit)r'   r2   r3   s      r    Ú_eval_traceÚFunctionMatrix._eval_tracep   s&   € Ý:Ý1Ù�T‹{×"Ñ" 3Ó'×,Ñ,Ó.Ð.r"   c                 óR   • [        [        U 5      5      [        [        U 5      5      4$ r-   )r   r
   r   r&   s    r    Ú_eval_as_real_imagÚ!FunctionMatrix._eval_as_real_imagu   s   € Ü”6˜$“<Ó ¤"¤V¨D£\Ó"2Ð3Ð3r"   © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Úpropertyr(   r   r/   r8   r;   Ú__static_attributes__Ú__classcell__)r   s   @r    r   r   	   sK   ø† ñEõL7ð* ñó ðð ñó ðò ò/÷
4ð 4r"   r   N)Úmatexprr   Úsympy.core.functionr   r   Úsympy.core.symbolr   Úsympy.core.sympifyr   r	   Úsympy.matricesr
   Ú$sympy.functions.elementary.complexesr   r   r   r=   r"   r    Ú<module>rL      s%   ðÝ ß 5Ý #ß 0Ý !ß 7ôm4�Zõ m4r"   