§
    OŠtj¸  ã                   ó¤   — d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	 d dl
mZ  G d„ de¦  «        Z G d„ d	e¦  «        Z G d
„ de¦  «        Zd„ ZdS )é    )Ú_sympify)Ú
MatrixExpr)ÚSÚEqÚGe)ÚMul)ÚKroneckerDeltac                   ó^   — e Zd ZdZ ed„ ¦  «        Z ed„ ¦  «        Zed„ ¦   «         Zd„ ZdS )ÚDiagonalMatrixa  DiagonalMatrix(M) will create a matrix expression that
    behaves as though all off-diagonal elements,
    `M[i, j]` where `i != j`, are zero.

    Examples
    ========

    >>> from sympy import MatrixSymbol, DiagonalMatrix, Symbol
    >>> n = Symbol('n', integer=True)
    >>> m = Symbol('m', integer=True)
    >>> D = DiagonalMatrix(MatrixSymbol('x', 2, 3))
    >>> D[1, 2]
    0
    >>> D[1, 1]
    x[1, 1]

    The length of the diagonal -- the lesser of the two dimensions of `M` --
    is accessed through the `diagonal_length` property:

    >>> D.diagonal_length
    2
    >>> DiagonalMatrix(MatrixSymbol('x', n + 1, n)).diagonal_length
    n

    When one of the dimensions is symbolic the other will be treated as
    though it is smaller:

    >>> tall = DiagonalMatrix(MatrixSymbol('x', n, 3))
    >>> tall.diagonal_length
    3
    >>> tall[10, 1]
    0

    When the size of the diagonal is not known, a value of None will
    be returned:

    >>> DiagonalMatrix(MatrixSymbol('x', n, m)).diagonal_length is None
    True

    c                 ó   — | j         d         S ©Nr   ©Úargs©Úselfs    úa/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/matrices/expressions/diagonal.pyú<lambda>zDiagonalMatrix.<lambda>2   ó   €  ¤	¨!¤€ ó    c                 ó   — | j         j        S ©N)ÚargÚshaper   s    r   r   zDiagonalMatrix.<lambda>4   s
   €  $¤(¤.€ r   c                 óö   — | j         \  }}|j        r|j        rt          ||¦  «        }nO|j        r
|j        s|}n>|j        r
|j        s|}n-||k    r|}n$	 t          ||¦  «        }n# t          $ r d }Y nw xY w|S r   )r   Ú
is_IntegerÚminÚ	TypeError©r   ÚrÚcÚms       r   Údiagonal_lengthzDiagonalMatrix.diagonal_length6   s°   € àŒz‰ˆˆ1ØŒ<ð 	˜AœLð 	Ý�A�q‘	”	ˆAˆAØŒ\ð 
	 !¤,ð 
	ØˆAˆAØŒ\ð 	 !¤,ð 	ØˆAˆAØ�!ŠVˆVØˆAˆAðÝ˜˜1‘I”I��øÝð ð ð Ø���ðøøøàˆs   ÁA' Á'A6Á5A6c                 ó’  — | j         �Zt          || j         ¦  «        t          j        u rt          j        S t          || j         ¦  «        t          j        u rt          j        S t          ||¦  «        }|t          j        u r| j        ||f         S |t          j        u rt          j        S | j        ||f         t          ||¦  «        z  S r   )	r"   r   r   ÚtrueÚZeror   r   Úfalser	   )r   ÚiÚjÚkwargsÚeqs        r   Ú_entryzDiagonalMatrix._entryH   s¦   € ØÔÐ+Ý�!�TÔ)Ñ*Ô*­a¬fÐ4Ð4Ý”v�Ý�A�tÔ+Ñ,Ô,µ´Ð6Ð6Ý”v�Ý��1‰XŒXˆØ•”ˆ<ˆ<Ø”8˜A˜q˜D”>Ð!Ø•1”7ˆ]ˆ]Ý”6ˆMØŒx˜˜1˜Œ~�n¨Q°Ñ2Ô2Ñ2Ð2r   N©	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r   r"   r+   © r   r   r   r   	   so   € € € € € ð'ð 'ðP ˆ(Ð,Ð,Ñ
-Ô
-€CàˆHÐ0Ð0Ñ1Ô1€Eàðð ñ „Xðð"3ð 3ð 3ð 3ð 3r   r   c                   ó\   — e Zd ZdZ ed„ ¦  «        Zed„ ¦   «         Zed„ ¦   «         Zd„ ZdS )Ú
DiagonalOfa™  DiagonalOf(M) will create a matrix expression that
    is equivalent to the diagonal of `M`, represented as
    a single column matrix.

    Examples
    ========

    >>> from sympy import MatrixSymbol, DiagonalOf, Symbol
    >>> n = Symbol('n', integer=True)
    >>> m = Symbol('m', integer=True)
    >>> x = MatrixSymbol('x', 2, 3)
    >>> diag = DiagonalOf(x)
    >>> diag.shape
    (2, 1)

    The diagonal can be addressed like a matrix or vector and will
    return the corresponding element of the original matrix:

    >>> diag[1, 0] == diag[1] == x[1, 1]
    True

    The length of the diagonal -- the lesser of the two dimensions of `M` --
    is accessed through the `diagonal_length` property:

    >>> diag.diagonal_length
    2
    >>> DiagonalOf(MatrixSymbol('x', n + 1, n)).diagonal_length
    n

    When only one of the dimensions is symbolic the other will be
    treated as though it is smaller:

    >>> dtall = DiagonalOf(MatrixSymbol('x', n, 3))
    >>> dtall.diagonal_length
    3

    When the size of the diagonal is not known, a value of None will
    be returned:

    >>> DiagonalOf(MatrixSymbol('x', n, m)).diagonal_length is None
    True

    c                 ó   — | j         d         S r   r   r   s    r   r   zDiagonalOf.<lambda>‚   r   r   c                 ó  — | j         j        \  }}|j        r|j        rt          ||¦  «        }nO|j        r
|j        s|}n>|j        r
|j        s|}n-||k    r|}n$	 t          ||¦  «        }n# t          $ r d }Y nw xY w|t
          j        fS r   )r   r   r   r   r   r   ÚOner   s       r   r   zDiagonalOf.shapeƒ   s¸   € àŒxŒ~‰ˆˆ1ØŒ<ð 	˜AœLð 	Ý�A�q‘	”	ˆAˆAØŒ\ð 
	 !¤,ð 
	ØˆAˆAØŒ\ð 	 !¤,ð 	ØˆAˆAØ�!ŠVˆVØˆAˆAðÝ˜˜1‘I”I��øÝð ð ð Ø���ðøøøà•!”%ˆxˆs   ÁA, Á,A;Á:A;c                 ó   — | j         d         S r   )r   r   s    r   r"   zDiagonalOf.diagonal_length•   s   € àŒz˜!Œ}Ðr   c                 ó*   —  | j         j        ||fi |¤ŽS r   )r   r+   )r   r'   r(   r)   s       r   r+   zDiagonalOf._entry™   s    € ØˆtŒxŒ˜q !Ð.Ð. vÐ.Ð.Ð.r   Nr,   r2   r   r   r4   r4   V   sw   € € € € € ð*ð *ðV ˆ(Ð,Ð,Ñ
-Ô
-€CØðð ñ „Xðð" ðð ñ „Xðð/ð /ð /ð /ð /r   r4   c                   óF   — e Zd ZdZd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Z	d„ Z
dS )	Ú
DiagMatrixz/
    Turn a vector into a diagonal matrix.
    c                 óô   — t          |¦  «        }t          j        | |¦  «        }|j        }|d         dk    r|d         n|d         }|j        d         dk    rd|_        nd|_        ||f|_        ||_        |S )Nr   é   TF)r   r   Ú__new__r   Ú	_iscolumnÚ_shapeÚ_vector)ÚclsÚvectorÚobjr   Údims        r   r>   zDiagMatrix.__new__¡   s}   € Ý˜&Ñ!Ô!ˆÝÔ   fÑ-Ô-ˆØ”ˆØ œ( aš-˜-ˆe�AŒhˆh¨U°1¬XˆØŒ<˜Œ?˜aÒÐØ ˆCŒMˆMà!ˆCŒMØ˜3�ZˆŒ
ØˆŒØˆ
r   c                 ó   — | j         S r   )r@   r   s    r   r   zDiagMatrix.shape®   s
   € àŒ{Ðr   c                 ó˜   — | j         r | j        j        |dfi |¤Ž}n | j        j        d|fi |¤Ž}||k    r|t          ||¦  «        z  }|S r   )r?   rA   r+   r	   )r   r'   r(   r)   Úresults        r   r+   zDiagMatrix._entry²   sl   € ØŒ>ð 	9Ø(�T”\Ô(¨¨AÐ8Ð8°Ð8Ð8ˆFˆFà(�T”\Ô(¨¨AÐ8Ð8°Ð8Ð8ˆFØ�Š6ˆ6Ø•n Q¨Ñ*Ô*Ñ*ˆFØˆr   c                 ó   — | S r   r2   r   s    r   Ú_eval_transposezDiagMatrix._eval_transpose»   s   € Øˆr   c                 ó`   — ddl m}  |t          | j                             ¦   «         ¦  «        Ž S )Nr   )Údiag)Úsympy.matrices.denserL   ÚlistrA   Úas_explicit)r   rL   s     r   rO   zDiagMatrix.as_explicit¾   s7   € Ø-Ð-Ð-Ð-Ð-Ð-Øˆt•T˜$œ,×2Ò2Ñ4Ô4Ñ5Ô5Ð6Ð6r   c                 óÌ  ‡— ddl m}m} ddlm} ddlm} ddlm} ddl	m
} | j        } ||                     |¦  «        ¦  «        r|S t          ||¦  «        r_ |t          |j        ¦  «        ¦  «        }	t!          |	j        d         ¦  «        D ]}
||
         |	|
|
f<   Œ t#          |¦  «        |	¦  «        S |j        r�d„ |j        D ¦   «         Šˆfd„|j        D ¦   «         }|r[t)          j        |¦  «        t-          |                     ‰¦  «                             ¦   «         ¦  «                             ¦   «         z  S t          ||¦  «        r|j        }t-          |¦  «        S )	Nr   )ÚaskÚQ)ÚMatMul)Ú	Transpose)Úeye)Ú
MatrixBasec                 ó    — g | ]}|j         ¯	|‘ŒS r2   )Ú	is_Matrix)Ú.0r   s     r   ú
<listcomp>z#DiagMatrix.doit.<locals>.<listcomp>Ò   s   € ÐDÐDÐD °c´mÐD˜ÐDÐDÐDr   c                 ó   •— g | ]}|‰v¯|‘Œ	S r2   r2   )rY   r   Úmatricess     €r   rZ   z#DiagMatrix.doit.<locals>.<listcomp>Ó   s#   ø€ ÐIÐIÐI˜s°SÀÐ5HÐ5H�sÐ5HÐ5HÐ5Hr   )Úsympy.assumptionsrQ   rR   Ú!sympy.matrices.expressions.matmulrS   Ú$sympy.matrices.expressions.transposerT   rM   rU   Úsympy.matrices.matrixbaserV   rA   ÚdiagonalÚ
isinstanceÚmaxr   ÚrangeÚtypeÚ	is_MatMulr   r   Úfromiterr;   Údoitr   )r   ÚhintsrQ   rR   rS   rT   rU   rV   rC   Úretr'   Úscalarsr\   s               @r   rh   zDiagMatrix.doitÂ   s«  ø€ Ø,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø<Ð<Ð<Ð<Ð<Ð<ØBÐBÐBÐBÐBÐBØ,Ð,Ð,Ð,Ð,Ð,Ø8Ð8Ð8Ð8Ð8Ð8Ø”ˆàˆ3ˆq�zŠz˜&Ñ!Ô!Ñ"Ô"ð 	ØˆMÝ�f˜jÑ)Ô)ð 	%Ø�#•c˜&œ,Ñ'Ô'Ñ(Ô(ˆCÝ˜3œ9 Qœ<Ñ(Ô(ð &ð &�Ø" 1œI��A�q�D‘	�	Ø•4˜‘<”< Ñ$Ô$Ð$ØÔð 	aØDÐD v¤{ÐDÑDÔDˆHØIÐIÐIÐI f¤kÐIÑIÔIˆGØð aÝ”| GÑ,Ô,­Z¸¿ºÈÑ8QÔ8Q×8VÒ8VÑ8XÔ8XÑ-YÔ-Y×-^Ò-^Ñ-`Ô-`Ñ`Ð`Ý�f˜iÑ(Ô(ð 	 Ø”ZˆFÝ˜&Ñ!Ô!Ð!r   N)r-   r.   r/   r0   r>   r1   r   r+   rJ   rO   rh   r2   r   r   r;   r;   �   s„   € € € € € ðð ðð ð ð ðð ñ „Xððð ð ðð ð ð7ð 7ð 7ð"ð "ð "ð "ð "r   r;   c                 óD   — t          | ¦  «                             ¦   «         S r   )r;   rh   )rC   s    r   Údiagonalize_vectorrm   Û   s   € Ý�fÑÔ×"Ò"Ñ$Ô$Ð$r   N)Úsympy.core.sympifyr   Úsympy.matrices.expressionsr   Ú
sympy.corer   r   r   Úsympy.core.mulr   Ú(sympy.functions.special.tensor_functionsr	   r   r4   r;   rm   r2   r   r   ú<module>rs      s  ðØ 'Ð 'Ð 'Ð 'Ð 'Ð 'à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø CÐ CÐ CÐ CÐ CÐ CðJ3ð J3ð J3ð J3ð J3�Zñ J3ô J3ð J3ðZD/ð D/ð D/ð D/ð D/�ñ D/ô D/ð D/ðN;"ð ;"ð ;"ð ;"ð ;"�ñ ;"ô ;"ð ;"ð|%ð %ð %ð %ð %r   