§
    PŠtj{!  ã                  óR  — d dl mZ d dlmZmZmZmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlZ G d„ de¦  «        Z G d	„ d
ee¦  «        Z G d„ dee¦  «        Z G d„ dee¦  «        Z G d„ dee¦  «        Zee_        ee_        ee_        ee_        ee_         e¦   «         e_        dS )é    )Úannotations)ÚBasisDependentÚBasisDependentAddÚBasisDependentMulÚBasisDependentZero)ÚSÚPow)Ú
AtomicExpr)ÚImmutableDenseMatrixNc                  óÀ   — e Zd ZU dZdZded<   ded<   ded<   ded<   ded<   d	ed
<   ed„ ¦   «         Zd„ Zd„ Z	ej        e	_        d„ Z
d„ Ze
j        e_        dd„Zd„ ZdS )ÚDyadiczå
    Super class for all Dyadic-classes.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Dyadic_tensor
    .. [2] Kane, T., Levinson, D. Dynamics Theory and Applications. 1985
           McGraw-Hill

    g      *@ztype[Dyadic]Ú
_expr_typeÚ	_mul_funcÚ	_add_funcÚ
_zero_funcÚ
_base_funcÚ
DyadicZeroÚzeroc                ó   — | j         S )z®
        Returns the components of this dyadic in the form of a
        Python dictionary mapping BaseDyadic instances to the
        corresponding measure numbers.

        )Ú_components©Úselfs    úQ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/vector/dyadic.pyÚ
componentszDyadic.components!   s   € ð ÔÐó    c                ó   — t           j        j        }t          |t          ¦  «        r|j        S t          ||¦  «        r^|j        }| j                             ¦   «         D ];\  }}|j        d          	                    |¦  «        }|||z  |j        d         z  z  }Œ<|S t          |t          ¦  «        r°t          j        }| j                             ¦   «         D ]ˆ\  }}	|j                             ¦   «         D ]i\  }
}|j        d          	                    |
j        d         ¦  «        }|j        d                              |
j        d         ¦  «        }|||	z  |z  |z  z  }ŒjŒ‰|S t          dt          t          |¦  «        ¦  «        z   dz   ¦  «        ‚)a„  
        Returns the dot product(also called inner product) of this
        Dyadic, with another Dyadic or Vector.
        If 'other' is a Dyadic, this returns a Dyadic. Else, it returns
        a Vector (unless an error is encountered).

        Parameters
        ==========

        other : Dyadic/Vector
            The other Dyadic or Vector to take the inner product with

        Examples
        ========

        >>> from sympy.vector import CoordSys3D
        >>> N = CoordSys3D('N')
        >>> D1 = N.i.outer(N.j)
        >>> D2 = N.j.outer(N.j)
        >>> D1.dot(D2)
        (N.i|N.j)
        >>> D1.dot(N.j)
        N.i

        é   r   z!Inner product is not defined for z and Dyadics.)ÚsympyÚvectorÚVectorÚ
isinstancer   r   r   ÚitemsÚargsÚdotr   ÚouterÚ	TypeErrorÚstrÚtype)r   Úotherr    ÚoutvecÚkÚvÚvect_dotÚoutdyadÚk1Úv1Úk2Úv2Úouter_products                r   r$   z
Dyadic.dot-   s–  € õ6 ”Ô$ˆÝ�eÕ/Ñ0Ô0ð 	@Ø”;ÐÝ˜˜vÑ&Ô&ð 	@Ø”[ˆFØœ×-Ò-Ñ/Ô/ð 3ð 3‘��1Øœ6 !œ9Ÿ=š=¨Ñ/Ô/�Ø˜( Q™,¨¬°¬Ñ2Ñ2��ØˆMÝ˜�vÑ&Ô&ð 
	@Ý”kˆGØœ/×/Ò/Ñ1Ô1ð Bð B‘��BØ#Ô.×4Ò4Ñ6Ô6ð Bð B‘F�B˜Ø!œw qœzŸ~š~¨b¬g°a¬jÑ9Ô9�HØ$&¤G¨A¤J×$4Ò$4°R´W¸Q´ZÑ$@Ô$@�MØ˜x¨"™}¨rÑ1°MÑAÑA�G�GðBð ˆNåÐ?Ý¥ U¡¤Ñ,Ô,ñ-Ø/>ñ?ñ @ô @ð @r   c                ó,   — |                       |¦  «        S ©N©r$   ©r   r)   s     r   Ú__and__zDyadic.__and__]   s   € Ø�xŠx˜‰ŒÐr   c                óº  — t           j        j        }||j        k    rt          j        S t          ||¦  «        rut          j        }| j                             ¦   «         D ]M\  }}|j        d          	                    |¦  «        }|j        d          
                    |¦  «        }|||z  z  }ŒN|S t          t          t          |¦  «        ¦  «        dz   dz   ¦  «        ‚)a§  
        Returns the cross product between this Dyadic, and a Vector, as a
        Vector instance.

        Parameters
        ==========

        other : Vector
            The Vector that we are crossing this Dyadic with

        Examples
        ========

        >>> from sympy.vector import CoordSys3D
        >>> N = CoordSys3D('N')
        >>> d = N.i.outer(N.i)
        >>> d.cross(N.j)
        (N.i|N.k)

        r   r   z not supported for zcross with dyadics)r   r   r    r   r   r!   r   r"   r#   Úcrossr%   r&   r'   r(   )r   r)   r    r.   r+   r,   Úcross_productr%   s           r   r:   zDyadic.crossb   sÐ   € õ, ”Ô$ˆØ�F”KÒÐÝ”;ÐÝ˜˜vÑ&Ô&ð 		2Ý”kˆGØœ×-Ò-Ñ/Ô/ð %ð %‘��1Ø !¤ q¤	§¢°Ñ 6Ô 6�Øœ˜qœ	Ÿš¨Ñ6Ô6�Ø˜1˜u™9Ñ$��ØˆNå�C¥ U¡¤Ñ,Ô,Ð/DÑDØ0ñ1ñ 2ô 2ð 2r   c                ó,   — |                       |¦  «        S r5   )r:   r7   s     r   Ú__xor__zDyadic.__xor__†   s   € Ø�zŠz˜%Ñ Ô Ð r   Nc                ón   ‡ ‡— ‰€|Št          ˆˆ fd„|D ¦   «         ¦  «                             dd¦  «        S )a%  
        Returns the matrix form of the dyadic with respect to one or two
        coordinate systems.

        Parameters
        ==========

        system : CoordSys3D
            The coordinate system that the rows and columns of the matrix
            correspond to. If a second system is provided, this
            only corresponds to the rows of the matrix.
        second_system : CoordSys3D, optional, default=None
            The coordinate system that the columns of the matrix correspond
            to.

        Examples
        ========

        >>> from sympy.vector import CoordSys3D
        >>> N = CoordSys3D('N')
        >>> v = N.i + 2*N.j
        >>> d = v.outer(N.i)
        >>> d.to_matrix(N)
        Matrix([
        [1, 0, 0],
        [2, 0, 0],
        [0, 0, 0]])
        >>> from sympy import Symbol
        >>> q = Symbol('q')
        >>> P = N.orient_new_axis('P', q, N.k)
        >>> d.to_matrix(N, P)
        Matrix([
        [  cos(q),   -sin(q), 0],
        [2*cos(q), -2*sin(q), 0],
        [       0,         0, 0]])

        Nc                ój   •— g | ]/}‰D ]*}|                      ‰¦  «                              |¦  «        ‘Œ+Œ0S © r6   )Ú.0ÚiÚjÚsecond_systemr   s      €€r   ú
<listcomp>z$Dyadic.to_matrix.<locals>.<listcomp>µ   sO   ø€ ð &ð &ð &¨aØ$ð&ð &¸a�q—u’u˜T‘{”{—’ qÑ)Ô)ð &ð &ð &ð &r   é   )ÚMatrixÚreshape)r   ÚsystemrD   s   ` `r   Ú	to_matrixzDyadic.to_matrix‹   s[   øø€ ðN Ð Ø"ˆMåð &ð &ð &ð &ð &°6ð &ñ &ô &ñ 'ô 'ß'.¢w¨q°!¡}¤}ð	5r   c                ó  — t          | t          ¦  «        r$t          |t          ¦  «        rt          d¦  «        ‚t          | t          ¦  «        r(t          | t	          |t
          j        ¦  «        ¦  «        S t          d¦  «        ‚)z' Helper for division involving dyadics zCannot divide two dyadicszCannot divide by a dyadic)r!   r   r&   Ú	DyadicMulr	   r   ÚNegativeOne)Úoner)   s     r   Ú_div_helperzDyadic._div_helper¸   sq   € å�c�6Ñ"Ô"ð 	9¥z°%½Ñ'@Ô'@ð 	9ÝÐ7Ñ8Ô8Ð8Ý˜�VÑ$Ô$ð 	9Ý˜S¥# e­Q¬]Ñ";Ô";Ñ<Ô<Ð<åÐ7Ñ8Ô8Ð8r   r5   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú_op_priorityÚ__annotations__Úpropertyr   r$   r8   r:   r=   rJ   rO   r@   r   r   r   r      s  € € € € € € ð
ð 
ð €LàÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑàð	 ð 	 ñ „Xð	 ð.@ð .@ð .@ð`ð ð ð ”k€G„Oð"2ð "2ð "2ðH!ð !ð !ð ”m€G„Oð+5ð +5ð +5ð +5ðZ9ð 9ð 9ð 9ð 9r   r   c                  ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )Ú
BaseDyadicz9
    Class to denote a base dyadic tensor component.
    c                ó,  •— t           j        j        }t           j        j        }t           j        j        }t          |||f¦  «        rt          |||f¦  «        st          d¦  «        ‚||j        k    s||j        k    rt          j        S t          ¦   «          
                    | ||¦  «        }||_        d|_        |t          j        i|_        |j        |_        d|j        z   dz   |j        z   dz   |_        d|j        z   dz   |j        z   dz   |_        |S )	Nz1BaseDyadic cannot be composed of non-base vectorsr   ú(ú|ú)z\left(z
{\middle|}z\right))r   r   r    Ú
BaseVectorÚ
VectorZeror!   r&   r   r   ÚsuperÚ__new__Ú_base_instanceÚ_measure_numberr   ÚOner   Ú_sysÚ_pretty_formÚ_latex_form)ÚclsÚvector1Úvector2r    r]   r^   ÚobjÚ	__class__s          €r   r`   zBaseDyadic.__new__Ç   s  ø€ Ý”Ô$ˆÝ”\Ô,ˆ
Ý”\Ô,ˆ
å˜' J°
Ð#;Ñ<Ô<ð 	Ý˜w¨°ZÐ(@ÑAÔAð	åð &ñ 'ô 'ð 'ð ˜œÒ#Ð# w°&´+Ò'=Ð'=Ý”;Ðå‰gŒg�oŠo˜c 7¨GÑ4Ô4ˆØ ˆÔØˆÔØ¥¤˜,ˆŒØ”<ˆŒØ 'Ô"6Ñ6¸Ñ<Ø$Ô1ñ2Ø47ñ8ˆÔà$ wÔ':Ñ:¸]ÑJØ"Ô.ñ/Ø1;ñ<ˆŒð ˆ
r   c                ó¦   — d                      |                     | j        d         ¦  «        |                     | j        d         ¦  «        ¦  «        S )Nz({}|{})r   r   ©ÚformatÚ_printr#   ©r   Úprinters     r   Ú	_sympystrzBaseDyadic._sympystrà   sF   € Ø×ÒØ�NŠN˜4œ9 Qœ<Ñ(Ô(¨'¯.ª.¸¼À1¼Ñ*FÔ*FñHô Hð 	Hr   c                ó¦   — d                      |                     | j        d         ¦  «        |                     | j        d         ¦  «        ¦  «        S )NzBaseDyadic({}, {})r   r   rm   rp   s     r   Ú
_sympyreprzBaseDyadic._sympyreprä   sF   € Ø#×*Ò*Ø�NŠN˜4œ9 Qœ<Ñ(Ô(¨'¯.ª.¸¼À1¼Ñ*FÔ*FñHô Hð 	Hr   )rP   rQ   rR   rS   r`   rr   rt   Ú__classcell__)rk   s   @r   rX   rX   Â   sj   ø€ € € € € ðð ðð ð ð ð ð2Hð Hð HðHð Hð Hð Hð Hð Hð Hr   rX   c                  óD   — e Zd ZdZd„ Zed„ ¦   «         Zed„ ¦   «         ZdS )rL   z% Products of scalars and BaseDyadics c                ó0   — t          j        | g|¢R i |¤Ž}|S r5   )r   r`   ©rg   r#   Úoptionsrj   s       r   r`   zDyadicMul.__new__ì   ó'   € ÝÔ'¨Ð>¨dÐ>Ð>Ð>°gÐ>Ð>ˆØˆ
r   c                ó   — | j         S )z) The BaseDyadic involved in the product. )ra   r   s    r   Úbase_dyadiczDyadicMul.base_dyadicð   s   € ð Ô"Ð"r   c                ó   — | j         S )zU The scalar expression involved in the definition of
        this DyadicMul.
        )rb   r   s    r   Úmeasure_numberzDyadicMul.measure_numberõ   s   € ð
 Ô#Ð#r   N)rP   rQ   rR   rS   r`   rV   r|   r~   r@   r   r   rL   rL   é   s_   € € € € € Ø/Ð/ðð ð ð ð#ð #ñ „Xð#ð ð$ð $ñ „Xð$ð $ð $r   rL   c                  ó   — e Zd ZdZd„ Zd„ ZdS )Ú	DyadicAddz Class to hold dyadic sums c                ó0   — t          j        | g|¢R i |¤Ž}|S r5   )r   r`   rx   s       r   r`   zDyadicAdd.__new__   rz   r   c                óÀ   ‡— t          | j                             ¦   «         ¦  «        }|                     d„ ¬¦  «         d                     ˆfd„|D ¦   «         ¦  «        S )Nc                ó6   — | d                               ¦   «         S )Nr   )Ú__str__)Úxs    r   ú<lambda>z%DyadicAdd._sympystr.<locals>.<lambda>  s   €   1¤§¢¡¤€ r   )Úkeyz + c              3  óN   •K  — | ]\  }}‰                      ||z  ¦  «        V — Œ d S r5   )ro   )rA   r+   r,   rq   s      €r   ú	<genexpr>z&DyadicAdd._sympystr.<locals>.<genexpr>  s7   øè è € ÐBÐB±D°A°q˜'Ÿ.š.¨¨Q©Ñ/Ô/ÐBÐBÐBÐBÐBÐBr   )Úlistr   r"   ÚsortÚjoin)r   rq   r"   s    ` r   rr   zDyadicAdd._sympystr  s]   ø€ Ý�T”_×*Ò*Ñ,Ô,Ñ-Ô-ˆØ�
Š
Ð/Ð/ˆ
Ñ0Ô0Ð0Ø�zŠzÐBÐBÐBÐB¸EÐBÑBÔBÑBÔBÐBr   N)rP   rQ   rR   rS   r`   rr   r@   r   r   r€   r€   ý   s=   € € € € € Ø%Ð%ðð ð ðCð Cð Cð Cð Cr   r€   c                  ó$   — e Zd ZdZdZdZdZd„ ZdS )r   z'
    Class to denote a zero dyadic
    g333333*@z(0|0)z#(\mathbf{\hat{0}}|\mathbf{\hat{0}})c                ó.   — t          j        | ¦  «        }|S r5   )r   r`   )rg   rj   s     r   r`   zDyadicZero.__new__  s   € Ý Ô(¨Ñ-Ô-ˆØˆ
r   N)rP   rQ   rR   rS   rT   re   rf   r`   r@   r   r   r   r   
  s>   € € € € € ðð ð €LØ€LØ8€Kðð ð ð ð r   r   )Ú
__future__r   Úsympy.vector.basisdependentr   r   r   r   Ú
sympy.corer   r	   Úsympy.core.exprr
   Úsympy.matrices.immutabler   rG   Úsympy.vectorr   r   rX   rL   r€   r   r   r   r   r   r   r   r@   r   r   ú<module>r•      sÙ  ðØ "Ð "Ð "Ð "Ð "Ð "ðPð Pð Pð Pð Pð Pð Pð Pð Pð Pð Pð Pà Ð Ð Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø CÐ CÐ CÐ CÐ CÐ CØ Ð Ð Ð ðt9ð t9ð t9ð t9ð t9ˆ^ñ t9ô t9ð t9ðn$Hð $Hð $Hð $Hð $H�˜ñ $Hô $Hð $HðN$ð $ð $ð $ð $Ð! 6ñ $ô $ð $ð(
Cð 
Cð 
Cð 
Cð 
CÐ! 6ñ 
Cô 
Cð 
Cðð ð ð ð Ð# Vñ ô ð ð €Ô Ø€Ô Ø€Ô Ø€Ô Ø€Ô Øˆj‰lŒl€„€€r   