§
    PŠtjH  ã                   ó¨   — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ  G d„ d	e¦  «        Zed
„ ¦   «         Z G d„ de¦  «        ZdS )é    )ÚIterable)Úsingledispatch)ÚExpr)ÚMul)ÚS©Úsympify)Úglobal_parametersc                   óD   — e Zd ZdZdZd„ Zd„ Zd„ Zed„ ¦   «         Z	d„ Z
dS )	ÚTensorProductz,
    Generic class for tensor products.
    Fc                 óF  — ddl m}m}m} ddlm} ddlm} ddlm	} d„ |D ¦   «         }| 
                    dt          j        ¦  «        }	|	st          j        | g|¢R Ž }
|
S g }g }t          j        }|D ]e}t#          |t$          ||f¦  «        r|                      ||¦  «        ¦  «         Œ9t#          ||f¦  «        r|                     |¦  «         Œ`||z  }Œf| ||Ž z  }t)          |¦  «        dk    r|S |dk    r|g|z   }n|}t          j        | g|¢R i |¤Ž}
 ||
¦  «        S )	Nr   )Ú	NDimArrayÚtensorproductÚArray)Ú
MatrixExpr)Ú
MatrixBase)Úflattenc                 ó,   — g | ]}t          |¦  «        ‘ŒS © r   )Ú.0Úargs     úT/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/tensor/functions.pyú
<listcomp>z)TensorProduct.__new__.<locals>.<listcomp>   s   € Ð-Ð-Ð- •˜‘”Ð-Ð-Ð-ó    Úevaluateé   )Úsympy.tensor.arrayr   r   r   Ú"sympy.matrices.expressions.matexprr   Úsympy.matrices.matrixbaser   Úsympy.strategiesr   Úgetr
   r   r   Ú__new__r   ÚOneÚ
isinstancer   ÚappendÚlen)ÚclsÚargsÚkwargsr   r   r   r   r   r   r   ÚobjÚarraysÚotherÚscalarr   ÚcoeffÚnewargss                    r   r"   zTensorProduct.__new__   s›  € ØFÐFÐFÐFÐFÐFÐFÐFÐFÐFØAÐAÐAÐAÐAÐAØ8Ð8Ð8Ð8Ð8Ð8Ø,Ð,Ð,Ð,Ð,Ð,à-Ð-¨Ð-Ñ-Ô-ˆØ—:’:˜jÕ*;Ô*DÑEÔEˆàð 	Ý”,˜sÐ* TÐ*Ð*Ð*ˆCØˆJàˆØˆÝ”ˆØð 	ð 	ˆCÝ˜#¥¨*°iÐ@ÑAÔAð Ø—’˜e˜e C™jœjÑ)Ô)Ð)Ð)Ý˜C * Ñ/Ô/ð Ø—’˜SÑ!Ô!Ð!Ð!à˜#‘��à�}�} fÐ-Ñ-ˆÝˆu‰:Œ:˜Š?ˆ?ØˆLØ�AŠ:ˆ:Ø�g ‘oˆGˆGàˆGÝŒl˜3Ð3 Ð3Ð3Ð3¨FÐ3Ð3ˆØˆw�s‰|Œ|Ðr   c                 ó*   — t          | j        ¦  «        S ©N)r&   Úshape)Úselfs    r   ÚrankzTensorProduct.rank3   s   € Ý�4”:‰ŒÐr   c                 ó6   ‡— ddl mŠ ˆfd„| j        D ¦   «         S )Nr   )r   c                 ó^   •— g | ])}t          |d ¦  «        r|j        n ‰|¦  «        j        ‘Œ*S )r2   )Úhasattrr2   )r   Úir   s     €r   r   z2TensorProduct._get_args_shapes.<locals>.<listcomp>8   s8   ø€ ÐVÐVÐVÀq�7 1 gÑ.Ô.ÐB�”�°E°E¸!±H´H´NÐVÐVÐVr   )r   r   r(   )r3   r   s    @r   Ú_get_args_shapeszTensorProduct._get_args_shapes6   s1   ø€ Ø,Ð,Ð,Ð,Ð,Ð,ØVÐVÐVÐVÈDÌIÐVÑVÔVÐVr   c                 óJ   — |                       ¦   «         }t          |d¦  «        S )Nr   )r9   Úsum)r3   Ú
shape_lists     r   r2   zTensorProduct.shape:   s#   € à×*Ò*Ñ,Ô,ˆ
Ý�:˜rÑ"Ô"Ð"r   c                 ó¬   ‡— t          ‰¦  «        Št          j        ˆfd„t          | j        |                      ¦   «         ¦  «        D ¦   «         ¦  «        S )Nc              3   óz   •K  — | ]5\  }}|                      t          ˆfd „|D ¦   «         ¦  «        ¦  «        V — Œ6dS )c              3   ó6   •K  — | ]}t          ‰¦  «        V — Œd S r1   )Únext)r   r8   Úindexs     €r   ú	<genexpr>z6TensorProduct.__getitem__.<locals>.<genexpr>.<genexpr>B   s)   øè è € Ð!;Ð!;°!¥$ u¡+¤+Ð!;Ð!;Ð!;Ð!;Ð!;Ð!;r   N)Ú__getitem__Útuple)r   r   ÚshprA   s      €r   rB   z,TensorProduct.__getitem__.<locals>.<genexpr>A   sd   øè è € ð 
ð 
á��Sð �OŠO�EÐ!;Ð!;Ð!;Ð!;°sÐ!;Ñ!;Ô!;Ñ;Ô;Ñ<Ô<ð
ð 
ð 
ð 
ð 
ð 
r   )Úiterr   ÚfromiterÚzipr(   r9   )r3   rA   s    `r   rC   zTensorProduct.__getitem__?   s`   ø€ Ý�U‘”ˆÝŒ|ð 
ð 
ð 
ð 
å ¤	¨4×+@Ò+@Ñ+BÔ+BÑCÔCð
ñ 
ô 
ñ 
ô 
ð 	
r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	is_numberr"   r4   r9   Úpropertyr2   rC   r   r   r   r   r      s€   € € € € € ðð ð €Ið ð  ð  ðDð ð ðWð Wð Wð ð#ð #ñ „Xð#ð
ð 
ð 
ð 
ð 
r   r   c                 óT   — t          | d¦  «        r| j        S t          d| z  ¦  «        ‚)aà  
    Return the shape of the *expr* as a tuple. *expr* should represent
    suitable object such as matrix or array.

    Parameters
    ==========

    expr : SymPy object having ``MatrixKind`` or ``ArrayKind``.

    Raises
    ======

    NoShapeError : Raised when object with wrong kind is passed.

    Examples
    ========

    This function returns the shape of any object representing matrix or array.

    >>> from sympy import shape, Array, ImmutableDenseMatrix, Integral
    >>> from sympy.abc import x
    >>> A = Array([1, 2])
    >>> shape(A)
    (2,)
    >>> shape(Integral(A, x))
    (2,)
    >>> M = ImmutableDenseMatrix([1, 2])
    >>> shape(M)
    (2, 1)
    >>> shape(Integral(M, x))
    (2, 1)

    You can support new type by dispatching.

    >>> from sympy import Expr
    >>> class NewExpr(Expr):
    ...     pass
    >>> @shape.register(NewExpr)
    ... def _(expr):
    ...     return shape(expr.args[0])
    >>> shape(NewExpr(M))
    (2, 1)

    If unsuitable expression is passed, ``NoShapeError()`` will be raised.

    >>> shape(Integral(x, x))
    Traceback (most recent call last):
      ...
    sympy.tensor.functions.NoShapeError: shape() called on non-array object: Integral(x, x)

    Notes
    =====

    Array-like classes (such as ``Matrix`` or ``NDimArray``) has ``shape``
    property which returns its shape, but it cannot be used for non-array
    classes containing array. This function returns the shape of any
    registered object representing array.

    r2   zA%s does not have shape, or its type is not registered to shape().)r7   r2   ÚNoShapeError)Úexprs    r   r2   r2   G   s<   € õz ˆt�WÑÔð ØŒzÐÝ
ØKÈdÑRñTô Tð Tr   c                   ó   — e Zd ZdZdS )rP   an  
    Raised when ``shape()`` is called on non-array object.

    This error can be imported from ``sympy.tensor.functions``.

    Examples
    ========

    >>> from sympy import shape
    >>> from sympy.abc import x
    >>> shape(x)
    Traceback (most recent call last):
      ...
    sympy.tensor.functions.NoShapeError: shape() called on non-array object: x
    N)rI   rJ   rK   rL   r   r   r   rP   rP   Š   s   € € € € € ðð ð 	€Dr   rP   N)Úcollections.abcr   Ú	functoolsr   Úsympy.core.exprr   Úsympy.core.mulr   Úsympy.core.singletonr   Úsympy.core.sympifyr	   Úsympy.core.parametersr
   r   r2   Ú	ExceptionrP   r   r   r   ú<module>r[      s  ðØ $Ð $Ð $Ð $Ð $Ð $Ø $Ð $Ð $Ð $Ð $Ð $à  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø &Ð &Ð &Ð &Ð &Ð &Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ð9
ð 9
ð 9
ð 9
ð 9
�Dñ 9
ô 9
ð 9
ðx ð?Tð ?Tñ „ð?TðD	ð 	ð 	ð 	ð 	�9ñ 	ô 	ð 	ð 	ð 	r   