§
    OŠtjzF  ã                   óh   — d dl mZmZmZ d dlmZ d dlmZ d dl	m
Z
 dgZ G d„ dee¦  «        Zd„ ZdS )	é    )ÚsympifyÚAddÚImmutableMatrix)Ú
EvalfMixin)Ú	Printable)Úprec_to_dpsÚDyadicc                   óÊ   — e Zd ZdZdZd„ Zed„ ¦   «         Zd„ ZeZ	d„ Z
e
Zd„ ZeZd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZeZdd„Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!dS )r	   ay  A Dyadic object.

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

    A more powerful way to represent a rigid body's inertia. While it is more
    complex, by choosing Dyadic components to be in body fixed basis vectors,
    the resulting matrix is equivalent to the inertia tensor.

    Fc                 ó>  — g | _         |dk    rg }t          |¦  «        dk    �rOd}t          | j         ¦  «        D ]ã\  }}t          |d         d         ¦  «        t          | j         |         d         ¦  «        k    r¡t          |d         d         ¦  «        t          | j         |         d         ¦  «        k    rd| j         |         d         |d         d         z   |d         d         |d         d         f| j         |<   |                     |d         ¦  «         d} nŒä|dk    r;| j                              |d         ¦  «         |                     |d         ¦  «         t          |¦  «        dk    �°Od}|t          | j         ¦  «        k     r�| j         |         d         dk    | j         |         d         dk    z  | j         |         d         dk    z  r*| j                              | j         |         ¦  «         |dz  }|dz  }|t          | j         ¦  «        k     °ŽdS dS )a2  
        Just like Vector's init, you should not call this unless creating a
        zero dyadic.

        zd = Dyadic(0)

        Stores a Dyadic as a list of lists; the inner list has the measure
        number and the two unit vectors; the outerlist holds each unique
        unit vector pair.

        r   é   é   N)ÚargsÚlenÚ	enumerateÚstrÚremoveÚappend)ÚselfÚinlistÚaddedÚiÚvs        úY/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/physics/vector/dyadic.pyÚ__init__zDyadic.__init__   sû  € ð ˆŒ	Ø�QŠ;ˆ;ØˆFÝ�&‰kŒk˜QÒÑØˆEÝ! $¤)Ñ,Ô,ð ð ‘��1Ý˜ œ 1œÑ&Ô&­#¨d¬i¸¬l¸1¬oÑ*>Ô*>Ò>Ð>Ý˜V AœY qœ\Ñ*Ô*­c°$´)¸A´,¸q´/Ñ.BÔ.BÒBÐBØ$(¤I¨a¤L°¤O°f¸Q´iÀ´lÑ$BØ$*¨1¤I¨a¤L°&¸´)¸A´,ð$@�D”I˜a‘Là—M’M &¨¤)Ñ,Ô,Ð,Ø�EØ�EøØ˜ŠzˆzØ”	× Ò  ¨¤Ñ+Ô+Ð+Ø—’˜f QœiÑ(Ô(Ð(õ �&‰kŒk˜QÒÑð ˆà•#�d”i‘.”.Ò Ð Ø”˜1”˜a” AÒ%¨$¬)°A¬,°q¬/¸QÒ*>Ñ?Ø”Y˜q”\ !”_¨Ò)ñ+ð à”	× Ò  ¤¨1¤Ñ.Ô.Ð.Ø�Q‘�Ø�‰FˆAð •#�d”i‘.”.Ò Ð Ð Ð Ð Ð ó    c                 ó   — t           S )zReturns the class Dyadic. )r	   ©r   s    r   ÚfunczDyadic.func@   s	   € õ ˆr   c                 óX   — t          |¦  «        }t          | j        |j        z   ¦  «        S )zThe add operator for Dyadic. )Ú_check_dyadicr	   r   ©r   Úothers     r   Ú__add__zDyadic.__add__E   s&   € å˜eÑ$Ô$ˆÝ�d”i %¤*Ñ,Ñ-Ô-Ð-r   c                 ó  — t          | j        ¦  «        }t          |¦  «        }t          t	          |¦  «        ¦  «        D ]1}|||         d         z  ||         d         ||         d         f||<   Œ2t          |¦  «        S )a…  Multiplies the Dyadic by a sympifyable expression.

        Parameters
        ==========

        other : Sympafiable
            The scalar to multiply this Dyadic with

        Examples
        ========

        >>> from sympy.physics.vector import ReferenceFrame, outer
        >>> N = ReferenceFrame('N')
        >>> d = outer(N.x, N.x)
        >>> 5 * d
        5*(N.x|N.x)

        r   r   r   )Úlistr   r   Úranger   r	   )r   r"   Únewlistr   s       r   Ú__mul__zDyadic.__mul__L   sw   € õ& �t”y‘/”/ˆÝ˜‘”ˆÝ•s˜7‘|”|Ñ$Ô$ð 	)ð 	)ˆAØ '¨!¤*¨Q¤-Ñ/°¸´¸A´Ø! !œ* Qœ-ð)ˆG�A‰JˆJå�g‰ŒÐr   c                 óö  — ddl m}m} t          |t          ¦  «        r‹t          |¦  «        }t	          d¦  «        }| j        D ]d}|j        D ]Z}||d         |d         z  |d                              |d         ¦  «        z  |d                              |d         ¦  «        z  z  }Œ[ŒenP ||¦  «        } |d¦  «        }| j        D ]2}||d         |d         z  |d                              |¦  «        z  z  }Œ3|S )aò  The inner product operator for a Dyadic and a Dyadic or Vector.

        Parameters
        ==========

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

        Examples
        ========

        >>> from sympy.physics.vector import ReferenceFrame, outer
        >>> N = ReferenceFrame('N')
        >>> D1 = outer(N.x, N.y)
        >>> D2 = outer(N.y, N.y)
        >>> D1.dot(D2)
        (N.x|N.y)
        >>> D1.dot(N.y)
        N.x

        r   )ÚVectorÚ_check_vectorr   r   )	Úsympy.physics.vector.vectorr*   r+   Ú
isinstancer	   r    r   ÚdotÚouter)r   r"   r*   r+   Úolr   Úv2s          r   r.   z
Dyadic.doth   s   € ð, 	FÐEÐEÐEÐEÐEÐEÐEÝ�e�VÑ$Ô$ð 
	6Ý! %Ñ(Ô(ˆEÝ˜‘”ˆBØ”Yð Qð Q�Øœ*ð Qð Q�BØ˜!˜Aœ$  A¤™,¨!¨A¬$¯(ª(°2°a´5©/¬/Ñ:¸aÀ¼d¿jºjÈÈAÌÑ>OÔ>OÑPÑP�B�BðQðQð "�M %Ñ(Ô(ˆEØ�˜‘”ˆBØ”Yð 6ð 6�Ø�a˜”d˜Q˜qœT‘k Q q¤T§X¢X¨e¡_¤_Ñ5Ñ5��Øˆ	r   c                 ó2   — |                       d|z  ¦  «        S )z0Divides the Dyadic by a sympifyable expression. r   )r(   r!   s     r   Ú__truediv__zDyadic.__truediv__�   s   € à�|Š|˜A ™IÑ&Ô&Ð&r   c                 óþ   — |dk    rt          d¦  «        }t          |¦  «        }| j        g k    r|j        g k    rdS | j        g k    s|j        g k    rdS t          | j        ¦  «        t          |j        ¦  «        k    S )z[Tests for equality.

        Is currently weak; needs stronger comparison testing

        r   TF)r	   r    r   Úsetr!   s     r   Ú__eq__zDyadic.__eq__“   sx   € ð �AŠ:ˆ:Ý˜1‘I”IˆEÝ˜eÑ$Ô$ˆØŒI˜ŠOˆO %¤*°Ò"2Ð"2Ø�4ØŒi˜2Šoˆo 5¤:°Ò#3Ð#3Ø�5Ý�4”9‰~Œ~¥ U¤Z¡¤Ò0Ð0r   c                 ó   — | |k     S ©N© r!   s     r   Ú__ne__zDyadic.__ne__£   s   € Ø˜5’=Ð Ð r   c                 ó   — | dz  S ©Néÿÿÿÿr9   r   s    r   Ú__neg__zDyadic.__neg__¦   s   € Ø�b‰yÐr   c                 ó  — | j         }t          |¦  «        dk    rt          d¦  «        S g }|D �]{}|d         dk    rQ|                     d|                     |d         ¦  «        z   dz   |                     |d         ¦  «        z   ¦  «         Œ`|d         dk    rQ|                     d|                     |d         ¦  «        z   dz   |                     |d         ¦  «        z   ¦  «         Œ½|d         dk    r²|                     |d         ¦  «        }t          |d         t          ¦  «        rd|z  }|                     d	¦  «        r|dd …         }d}nd}|                     ||z   |                     |d         ¦  «        z   dz   |                     |d         ¦  «        z   ¦  «         �Œ}d
                     |¦  «        }|                     d¦  «        r|dd …         }n|                     d¦  «        r
|dd …         }|S )Nr   r   ú + z\otimes r   r=   ú - ú(%s)ú-Ú é   ú )	r   r   r   r   Ú_printr-   r   Ú
startswithÚjoin©r   ÚprinterÚarr0   r   Úarg_strÚ	str_startÚoutstrs           r   Ú_latexzDyadic._latex©   s  € ØŒYˆÝˆr‰7Œ7�aŠ<ˆ<Ý�q‘6”6ˆMØˆØð 	>ñ 	>ˆAà�Œt�qŠyˆyØ—	’	˜% '§.¢.°°1´Ñ"6Ô"6Ñ6¸ÑDØ!Ÿ.š.¨¨1¬Ñ.Ô.ñ/ñ 0ô 0ð 0ð 0ð �1”˜’�Ø—	’	˜%Ø!Ÿ.š.¨¨1¬Ñ.Ô.ñ/à%ñ&ð "Ÿ.š.¨¨1¬Ñ.Ô.ñ/ñ 0ô 0ð 0ð 0ð �1”˜’�Ø!Ÿ.š.¨¨1¬Ñ.Ô.�Ý˜a œd¥CÑ(Ô(ð /Ø$ wÑ.�GØ×%Ò% cÑ*Ô*ð &Ø% a b bœk�GØ %�I�Ià %�IØ—	’	˜) gÑ-°·²¸qÀ¼tÑ0DÔ0DÑDØ%ñ&Ø(/¯ª°q¸´tÑ(<Ô(<ñ=ñ >ô >ð >ùà—’˜‘”ˆØ×Ò˜UÑ#Ô#ð 	 Ø˜A˜B˜B”ZˆFˆFØ×Ò˜sÑ#Ô#ð 	 Ø˜A˜B˜B”ZˆFØˆr   c                 ó>   ‡‡— | Š G ˆˆfd„d¦  «        } |¦   «         S )Nc                   ó    •— e Zd ZdZˆ ˆfd„ZdS )úDyadic._pretty.<locals>.Faker   c                 ó\  •— ‰j         }‰}t          |¦  «        dk    rt          d¦  «        S ‰j        rdnd}g }|D �]š}|d         dk    rL|                     d|                     |d         ¦  «        ||                     |d         ¦  «        g¦  «         Œ[|d         dk    rL|                     d|                     |d         ¦  «        ||                     |d         ¦  «        g¦  «         Œ³|d         dk    rÛt          |d         t          ¦  «        r4|                     |d         ¦  «         	                    ¦   «         d         }n|                     |d         ¦  «        }| 
                    d	¦  «        r|dd …         }d}	nd}	|                     |	|d
|                     |d         ¦  «        ||                     |d         ¦  «        g¦  «         �Œœd                     |¦  «        }
|
 
                    d¦  «        r|
dd …         }
n|
 
                    d
¦  «        r
|
dd …         }
|
S )Nr   u   âŠ—ú|r   r@   r   r=   rA   rC   rF   rD   rE   )r   r   r   Ú_use_unicodeÚextendÚdoprintr-   r   rG   ÚparensrH   rI   )r   r   ÚkwargsrL   ÚmppÚbarr0   r   rM   rN   rO   ÚerK   s              €€r   Úrenderz#Dyadic._pretty.<locals>.Fake.renderÓ   sB  ø€ Ø”V�Ø�Ý�r‘7”7˜a’<�<Ý˜q™6œ6�MØ-4Ô-AÐJÐ)Ð)Às�Ø�Øð 6ñ 6�Aà˜”t˜q’y�yØŸ	š	 5Ø"%§+¢+¨a°¬dÑ"3Ô"3Ø"%Ø"%§+¢+¨a°¬dÑ"3Ô"3ð#5ñ 6ô 6ð 6ð 6ð ˜1œ š˜ØŸ	š	 5Ø"%§+¢+¨a°¬dÑ"3Ô"3Ø"%Ø"%§+¢+¨a°¬dÑ"3Ô"3ð#5ñ 6ô 6ð 6ð 6ð ˜1œ š˜Ý% a¨¤d­CÑ0Ô0ð 8Ø&)§j¢jØ ! !¤ñ'&ô '&ß&,¢f¡h¤h¨qô'2˜G˜Gð '*§k¢k°!°A´$Ñ&7Ô&7˜GØ"×-Ò-¨cÑ2Ô2ð .Ø&-¨a¨b¨b¤k˜GØ(-˜I˜Ià(-˜IØŸ	š	 9¨g°sØ"%§+¢+¨a°¬dÑ"3Ô"3Ø"%Ø"%§+¢+¨a°¬dÑ"3Ô"3ð#5ñ 6ô 6ð 6ùð
 Ÿš ™œ�Ø×$Ò$ UÑ+Ô+ð (Ø# A B BœZ�F�FØ×&Ò& sÑ+Ô+ð (Ø# A B BœZ�FØ�r   N)Ú__name__Ú
__module__Ú__qualname__Úbaseliner^   )r]   rK   s   €€r   ÚFakerS   Ð   s8   ø€ € € € € ØˆHð-ð -ð -ð -ð -ð -ð -ð -r   rc   r9   )r   rK   rc   r]   s    ` @r   Ú_prettyzDyadic._prettyÍ   sN   øø€ Øˆð0	ð 0	ð 0	ð 0	ð 0	ð 0	ð 0	ð 0	ñ 0	ô 0	ð 0	ðb ˆt‰vŒvˆr   c                 ó   — d| z  |z   S r<   r9   r!   s     r   Ú__rsub__zDyadic.__rsub__  s   € Ø�T‘	˜UÑ"Ð"r   c                 ó  — | j         }t          |¦  «        dk    r|                     d¦  «        S g }|D �]~}|d         dk    rT|                     d|                     |d         ¦  «        z   dz   |                     |d         ¦  «        z   dz   ¦  «         Œc|d         dk    rT|                     d|                     |d         ¦  «        z   dz   |                     |d         ¦  «        z   dz   ¦  «         ŒÃ|d         dk    r¯|                     |d         ¦  «        }t	          |d         t
          ¦  «        rd	|z  }|d         d
k    r|dd…         }d}nd}|                     ||z   dz   |                     |d         ¦  «        z   dz   |                     |d         ¦  «        z   dz   ¦  «         �Œ€d                     |¦  «        }|                     d¦  «        r|dd…         }n|                     d¦  «        r
|dd…         }|S )zPrinting method. r   r   z + (rU   r   ú)r=   z - (rB   rC   NrA   r@   z*(rD   rE   rF   )r   r   rG   r   r-   r   rI   rH   rJ   s           r   Ú	_sympystrzDyadic._sympystr  s5  € àŒYˆÝˆr‰7Œ7�aŠ<ˆ<Ø—>’> !Ñ$Ô$Ð$ØˆØð 	<ñ 	<ˆAà�Œt�qŠyˆyØ—	’	˜& 7§>¢>°!°A´$Ñ#7Ô#7Ñ7¸#Ñ=Ø!Ÿ.š.¨¨1¬Ñ.Ô.ñ/Ø14ñ5ñ 6ô 6ð 6ð 6ð �1”˜’�Ø—	’	˜& 7§>¢>°!°A´$Ñ#7Ô#7Ñ7¸#Ñ=Ø!Ÿ.š.¨¨1¬Ñ.Ô.ñ/Ø14ñ5ñ 6ô 6ð 6ð 6ð �1”˜’�Ø!Ÿ.š.¨¨1¬Ñ.Ô.�Ý˜a œd¥CÑ(Ô(ð /Ø$ wÑ.�GØ˜1”: Ò$Ð$Ø% a b bœk�GØ %�I�Ià %�IØ—	’	˜) gÑ-°Ñ4Ø!Ÿ.š.¨¨1¬Ñ.Ô.ñ/àñà '§¢¨q°¬tÑ 4Ô 4ñ5à7:ñ;ñ <ô <ð <ùð —’˜‘”ˆØ×Ò˜UÑ#Ô#ð 	 Ø˜A˜B˜B”ZˆFˆFØ×Ò˜sÑ#Ô#ð 	 Ø˜A˜B˜B”ZˆFØˆr   c                 ó2   — |                       |dz  ¦  «        S )zThe subtraction operator. r=   )r#   r!   s     r   Ú__sub__zDyadic.__sub__*  s   € à�|Š|˜E B™JÑ'Ô'Ð'r   c                 óÚ   — ddl m}  ||¦  «        }t          d¦  «        }| j        D ]B}||d         |d                              |d                              |¦  «        ¦  «        z  z  }ŒC|S )a¢  Returns the dyadic resulting from the dyadic vector cross product:
        Dyadic x Vector.

        Parameters
        ==========
        other : Vector
            Vector to cross with.

        Examples
        ========
        >>> from sympy.physics.vector import ReferenceFrame, outer, cross
        >>> N = ReferenceFrame('N')
        >>> d = outer(N.x, N.x)
        >>> cross(d, N.y)
        (N.x|N.z)

        r   )r+   r   r   )r,   r+   r	   r   r/   Úcross)r   r"   r+   r0   r   s        r   rm   zDyadic.cross.  s{   € ð$ 	>Ð=Ð=Ð=Ð=Ð=Ø�˜eÑ$Ô$ˆÝ�A‰YŒYˆØ”ð 	;ð 	;ˆAØ�!�A”$˜!˜Aœ$Ÿ*š* a¨¤d§j¢j°Ñ&7Ô&7Ñ9Ô9Ñ:Ñ:ˆBˆBØˆ	r   Nc                 ó(   — ddl m}  || ||¦  «        S )a  Expresses this Dyadic in alternate frame(s)

        The first frame is the list side expression, the second frame is the
        right side; if Dyadic is in form A.x|B.y, you can express it in two
        different frames. If no second frame is given, the Dyadic is
        expressed in only one frame.

        Calls the global express function

        Parameters
        ==========

        frame1 : ReferenceFrame
            The frame to express the left side of the Dyadic in
        frame2 : ReferenceFrame
            If provided, the frame to express the right side of the Dyadic in

        Examples
        ========

        >>> from sympy.physics.vector import ReferenceFrame, outer, dynamicsymbols
        >>> from sympy.physics.vector import init_vprinting
        >>> init_vprinting(pretty_print=False)
        >>> N = ReferenceFrame('N')
        >>> q = dynamicsymbols('q')
        >>> B = N.orientnew('B', 'Axis', [q, N.z])
        >>> d = outer(N.x, N.x)
        >>> d.express(B, N)
        cos(q)*(B.x|N.x) - sin(q)*(B.y|N.x)

        r   )Úexpress)Úsympy.physics.vector.functionsro   )r   Úframe1Úframe2ro   s       r   ro   zDyadic.expressJ  s+   € ð@ 	;Ð:Ð:Ð:Ð:Ð:Øˆw�t˜V VÑ,Ô,Ð,r   c                 ón   ‡ ‡— ‰€|Št          ˆˆ fd„|D ¦   «         ¦  «                             dd¦  «        S )a�  Returns the matrix form of the dyadic with respect to one or two
        reference frames.

        Parameters
        ----------
        reference_frame : ReferenceFrame
            The reference frame that the rows and columns of the matrix
            correspond to. If a second reference frame is provided, this
            only corresponds to the rows of the matrix.
        second_reference_frame : ReferenceFrame, optional, default=None
            The reference frame that the columns of the matrix correspond
            to.

        Returns
        -------
        matrix : ImmutableMatrix, shape(3,3)
            The matrix that gives the 2D tensor form.

        Examples
        ========

        >>> from sympy import symbols, trigsimp
        >>> from sympy.physics.vector import ReferenceFrame
        >>> from sympy.physics.mechanics import inertia
        >>> Ixx, Iyy, Izz, Ixy, Iyz, Ixz = symbols('Ixx, Iyy, Izz, Ixy, Iyz, Ixz')
        >>> N = ReferenceFrame('N')
        >>> inertia_dyadic = inertia(N, Ixx, Iyy, Izz, Ixy, Iyz, Ixz)
        >>> inertia_dyadic.to_matrix(N)
        Matrix([
        [Ixx, Ixy, Ixz],
        [Ixy, Iyy, Iyz],
        [Ixz, Iyz, Izz]])
        >>> beta = symbols('beta')
        >>> A = N.orientnew('A', 'Axis', (beta, N.x))
        >>> trigsimp(inertia_dyadic.to_matrix(A))
        Matrix([
        [                           Ixx,                                           Ixy*cos(beta) + Ixz*sin(beta),                                           -Ixy*sin(beta) + Ixz*cos(beta)],
        [ Ixy*cos(beta) + Ixz*sin(beta), Iyy*cos(2*beta)/2 + Iyy/2 + Iyz*sin(2*beta) - Izz*cos(2*beta)/2 + Izz/2,                 -Iyy*sin(2*beta)/2 + Iyz*cos(2*beta) + Izz*sin(2*beta)/2],
        [-Ixy*sin(beta) + Ixz*cos(beta),                -Iyy*sin(2*beta)/2 + Iyz*cos(2*beta) + Izz*sin(2*beta)/2, -Iyy*cos(2*beta)/2 + Iyy/2 - Iyz*sin(2*beta) + Izz*cos(2*beta)/2 + Izz/2]])

        Nc                 ój   •— g | ]/}‰D ]*}|                      ‰¦  «                              |¦  «        ‘Œ+Œ0S r9   )r.   )Ú.0r   ÚjÚsecond_reference_framer   s      €€r   ú
<listcomp>z$Dyadic.to_matrix.<locals>.<listcomp>›  sO   ø€ ð .ð .ð .¨aØ,ð.ð .Àq�q—u’u˜T‘{”{—’ qÑ)Ô)ð .ð .ð .ð .r   rE   )ÚMatrixÚreshape)r   Úreference_framerw   s   ` `r   Ú	to_matrixzDyadic.to_matrixm  s\   øø€ ðV "Ð)Ø%4Ð"åð .ð .ð .ð .ð .°?ð .ñ .ô .ñ /ô /ß/6ªw°q¸!©}¬}ð	=r   c                 ó`   ‡— t          ˆfd„| j        D ¦   «         t          d¦  «        ¦  «        S )z(Calls .doit() on each term in the Dyadicc           	      óp   •— g | ]2}t           |d          j        di ‰¤Ž|d         |d         fg¦  «        ‘Œ3S )r   r   r   r9   )r	   Údoit)ru   r   Úhintss     €r   rx   zDyadic.doit.<locals>.<listcomp>   sY   ø€ ð (ð (ð (Øõ ˜Y˜Q˜qœTœYÐ/Ð/¨Ð/Ð/°°1´°q¸´tÐ<Ð=Ñ>Ô>ð (ð (ð (r   r   ©Úsumr   r	   )r   r€   s    `r   r   zDyadic.doitž  sF   ø€ åð (ð (ð (ð (Ø!œYð(ñ (ô (Ý)/°©¬ñ4ô 4ð 	4r   c                 ó&   — ddl m}  || |¦  «        S )a¯  Take the time derivative of this Dyadic in a frame.

        This function calls the global time_derivative method

        Parameters
        ==========

        frame : ReferenceFrame
            The frame to take the time derivative in

        Examples
        ========

        >>> from sympy.physics.vector import ReferenceFrame, outer, dynamicsymbols
        >>> from sympy.physics.vector import init_vprinting
        >>> init_vprinting(pretty_print=False)
        >>> N = ReferenceFrame('N')
        >>> q = dynamicsymbols('q')
        >>> B = N.orientnew('B', 'Axis', [q, N.z])
        >>> d = outer(N.x, N.x)
        >>> d.dt(B)
        - q'*(N.y|N.x) - q'*(N.x|N.y)

        r   )Útime_derivative)rp   r„   )r   Úframer„   s      r   Údtz	Dyadic.dt£  s)   € ð2 	CÐBÐBÐBÐBÐBØˆ˜t UÑ+Ô+Ð+r   c                 ó¬   — t          d¦  «        }| j        D ]<}|t          |d                              ¦   «         |d         |d         fg¦  «        z  }Œ=|S )zReturns a simplified Dyadic.r   r   r   )r	   r   Úsimplify)r   Úoutr   s      r   rˆ   zDyadic.simplify¿  sU   € å�Q‰iŒiˆØ”ð 	;ð 	;ˆAØ•6˜A˜aœDŸMšM™OœO¨Q¨q¬T°1°Q´4Ð8Ð9Ñ:Ô:Ñ:ˆCˆCØˆ
r   c                 ód   ‡‡— t          ˆˆfd„| j        D ¦   «         t          d¦  «        ¦  «        S )a5  Substitution on the Dyadic.

        Examples
        ========

        >>> from sympy.physics.vector import ReferenceFrame
        >>> from sympy import Symbol
        >>> N = ReferenceFrame('N')
        >>> s = Symbol('s')
        >>> a = s*(N.x|N.x)
        >>> a.subs({s: 2})
        2*(N.x|N.x)

        c           	      óp   •— g | ]2}t           |d          j        ‰i ‰¤Ž|d         |d         fg¦  «        ‘Œ3S )r   r   r   )r	   Úsubs)ru   r   r   rZ   s     €€r   rx   zDyadic.subs.<locals>.<listcomp>Ö  sX   ø€ ð (ð (ð (Øõ ˜Y˜Q˜qœTœY¨Ð7°Ð7Ð7¸¸1¼¸qÀ¼tÐDÐEÑFÔFð (ð (ð (r   r   r�   )r   r   rZ   s    ``r   rŒ   zDyadic.subsÆ  sN   øø€ õ  ð (ð (ð (ð (ð (Ø!œYð(ñ (ô (Ý)/°©¬ñ4ô 4ð 	4r   c                 óÄ   — t          |¦  «        st          d¦  «        ‚t          d¦  «        }| j        D ]*\  }}}| ||¦  «        |                     |¦  «        z  z  }Œ+|S )z/Apply a function to each component of a Dyadic.z`f` must be callable.r   )ÚcallableÚ	TypeErrorr	   r   r/   )r   Úfr‰   ÚaÚbÚcs         r   Ú	applyfunczDyadic.applyfuncÙ  si   € å˜‰{Œ{ð 	5ÝÐ3Ñ4Ô4Ð4å�Q‰iŒiˆØ”yð 	'ð 	'‰GˆAˆq�!Ø�1�1�Q‘4”4˜1Ÿ7š7 1™:œ:Ñ&Ñ&ˆCˆCØˆ
r   c                 ó  — | j         s| S g }t          |¦  «        }| j         D ]R}t          |¦  «        }|d                              |¬¦  «        |d<   |                     t          |¦  «        ¦  «         ŒSt          |¦  «        S )Nr   )Ún)r   r   r%   Úevalfr   Útupler	   )r   ÚprecÚnew_argsÚdpsr   Ú
new_inlists         r   Ú_eval_evalfzDyadic._eval_evalfã  s…   € ØŒyð 	ØˆKØˆÝ˜$ÑÔˆØ”ið 	/ð 	/ˆFÝ˜f™œˆJØ" 1œIŸOšO¨c˜OÑ2Ô2ˆJ�q‰MØ�OŠO�E *Ñ-Ô-Ñ.Ô.Ð.Ð.Ý�hÑÔÐr   c                 óÖ   — g }| j         D ]Q}t          |¦  «        }|d                              |¦  «        |d<   |                     t	          |¦  «        ¦  «         ŒRt          |¦  «        S )a®  
        Replace occurrences of objects within the measure numbers of the
        Dyadic.

        Parameters
        ==========

        rule : dict-like
            Expresses a replacement rule.

        Returns
        =======

        Dyadic
            Result of the replacement.

        Examples
        ========

        >>> from sympy import symbols, pi
        >>> from sympy.physics.vector import ReferenceFrame, outer
        >>> N = ReferenceFrame('N')
        >>> D = outer(N.x, N.x)
        >>> x, y, z = symbols('x y z')
        >>> ((1 + x*y) * D).xreplace({x: pi})
        (pi*y + 1)*(N.x|N.x)
        >>> ((1 + x*y) * D).xreplace({x: pi, y: 2})
        (1 + 2*pi)*(N.x|N.x)

        Replacements occur only if an entire node in the expression tree is
        matched:

        >>> ((x*y + z) * D).xreplace({x*y: pi})
        (z + pi)*(N.x|N.x)
        >>> ((x*y*z) * D).xreplace({x*y: pi})
        x*y*z*(N.x|N.x)

        r   )r   r%   Úxreplacer   r˜   r	   )r   Úrulerš   r   rœ   s        r   rŸ   zDyadic.xreplaceî  sl   € ðP ˆØ”ið 	/ð 	/ˆFÝ˜f™œˆJØ& qœM×2Ò2°4Ñ8Ô8ˆJ�q‰MØ�OŠO�E *Ñ-Ô-Ñ.Ô.Ð.Ð.Ý�hÑÔÐr   r8   )"r_   r`   ra   Ú__doc__Ú	is_numberr   Úpropertyr   r#   Ú__radd__r(   Ú__rmul__r.   Ú__and__r3   r6   r:   r>   rP   rd   rf   ri   rk   rm   Ú__xor__ro   r|   r   r†   rˆ   rŒ   r”   r�   rŸ   r9   r   r   r	   r	      sÆ  € € € € € ð
ð 
ð €Ið$ð $ð $ðL ðð ñ „Xðð.ð .ð .ð
 €Hðð ð ð4 €Hð"ð "ð "ðJ €Gð'ð 'ð 'ð1ð 1ð 1ð !ð !ð !ðð ð ð"ð "ð "ðH4ð 4ð 4ðl#ð #ð #ð"ð "ð "ðH(ð (ð (ðð ð ð4 €Gð!-ð !-ð !-ð !-ðF/=ð /=ð /=ð /=ðb4ð 4ð 4ð
,ð ,ð ,ð8ð ð ð4ð 4ð 4ð&ð ð ð	 ð 	 ð 	 ð- ð - ð - ð - ð - r   c                 óN   — t          | t          ¦  «        st          d¦  «        ‚| S )NzA Dyadic must be supplied)r-   r	   r�   )r"   s    r   r    r      s(   € Ý�e�VÑ$Ô$ð 5ÝÐ3Ñ4Ô4Ð4Ø€Lr   N)Úsympyr   r   r   ry   Úsympy.core.evalfr   Úsympy.printing.defaultsr   Úmpmath.libmp.libmpfr   Ú__all__r	   r    r9   r   r   ú<module>r®      s°   ðØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø -Ð -Ð -Ð -Ð -Ð -à +Ð +Ð +Ð +Ð +Ð +ð ˆ*€ðP ð P ð P ð P ð P ˆY˜
ñ P ô P ð P ðfð ð ð ð r   