Ë
    7^(hzF  ã                   ó`   — 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y)	é    )Ú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!y)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k7  �rd}t        | j                   «      D ]¯  \  }}t        |d   d   «      t        | j                   |   d   «      k(  sŒ4t        |d   d   «      t        | j                   |   d   «      k(  sŒb| j                   |   d   |d   d   z   |d   d   |d   d   f| j                   |<   |j	                  |d   «       d} n |dk7  r2| j                   j                  |d   «       |j	                  |d   «       t        |«      dk7  r�Œd}|t        | j                   «      k  r�| j                   |   d   dk(  | j                   |   d   dk(  z  | j                   |   d   dk(  z  r-| j                   j	                  | j                   |   «       |dz  }|dz  }|t        | j                   «      k  rŒŒyy)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/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/physics/vector/dyadic.pyÚ__init__zDyadic.__init__   s¾  € ð ˆŒ	Ø�QŠ;ØˆFÜ�&‹k˜QÓØˆEÜ! $§)¡)Ó,ò ‘��1Ü˜ ™ 1™Ó&¬#¨d¯i©i¸©l¸1©oÓ*>Ó>Ü˜V A™Y q™\Ó*¬c°$·)±)¸A±,¸q±/Ó.BÓBØ$(§I¡I¨a¡L°¡O°f¸Q±iÀ±lÑ$BØ$*¨1¡I¨a¡L°&¸±)¸A±,ð$@�D—I‘I˜a‘Là—M‘M &¨¡)Ô,Ø�EÙðð ˜ŠzØ—	‘	× Ñ  ¨¡Ô+Ø—‘˜f Q™iÔ(ô �&‹k˜QÔð ˆà”#�d—i‘i“.Ò Ø—‘˜1‘˜a‘ AÑ%¨$¯)©)°A©,°q©/¸QÑ*>Ñ?Ø—Y‘Y˜q‘\ !‘_¨Ñ)ò+à—	‘	× Ñ  §¡¨1¡Ô.Ø�Q‘�Ø�‰FˆAð ”#�d—i‘i“.Õ ó    c                 ó   — t         S )zReturns the class Dyadic. )r	   ©r   s    r   ÚfunczDyadic.func@   s	   € ô ˆr   c                 ó\   — 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‘i %§*¡*Ñ,Ó-Ð-r   c                 óÄ   — t        | j                  «      }t        |«      }t        t	        |«      «      D ]  }|||   d   z  ||   d   ||   d   f||<   Œ! t        |«      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   sn   € ô& �t—y‘y“/ˆÜ˜“ˆÜ”s˜7“|Ó$ò 	)ˆAØ '¨!¡*¨Q¡-Ñ/°¸±¸A±Ø! !™* Q™-ð)ˆG�AŠJð	)ô �g‹Ðr   c                 ó®  — ddl m}m} t        |t        «      rxt        |«      }t	        d«      }| j                  D ]Q  }|j                  D ]@  }||d   |d   z  |d   j                  |d   «      z  |d   j                  |d   «      z  z  }ŒB ŒS |S  ||«      } |d«      }| j                  D ]%  }||d   |d   z  |d   j                  |«      z  z  }Œ' |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œVÔ$Ü! %Ó(ˆEÜ˜“ˆBØ—Y‘Yò Q�ØŸ*™*ò Q�BØ˜!˜A™$  A¡™,¨!¨A©$¯(©(°2°a±5«/Ñ:¸aÀ¹d¿j¹jÈÈAÉÓ>OÑPÑP‘BñQðQð ˆ	ñ	 " %Ó(ˆEÙ˜“ˆBØ—Y‘Yò 6�Ø�a˜‘d˜Q˜q™T‘k Q q¡T§X¡X¨e£_Ñ5Ñ5‘ð6àˆ	r   c                 ó*   — | j                  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y| j                  g k(  s|j                  g k(  ry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__“   sk   € ð �AŠ:Ü˜1“IˆEÜ˜eÓ$ˆØ�I‰I˜ŠO %§*¡*°Ò"2ØØ�i‰i˜2Šo 5§:¡:°Ò#3ØÜ�4—9‘9‹~¤ U§Z¡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(  r?|j                  d|j	                  |d   «      z   dz   |j	                  |d   «      z   «       ŒK|d   dk(  r?|j                  d|j	                  |d   «      z   dz   |j	                  |d   «      z   «       Œ’|d   dk7  sŒ›|j	                  |d   «      }t        |d   t        «      rd|z  }|j                  d	«      r|dd  }d}nd}|j                  ||z   |j	                  |d   «      z   dz   |j	                  |d   «      z   «       �Œ% d
j                  |«      }|j                  d«      r|dd  }|S |j                  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‰YˆÜˆr‹7�aŠ<Ü�q“6ˆMØˆØó 	>ˆAà�‰t�qŠyØ—	‘	˜% '§.¡.°°1±Ó"6Ñ6¸ÑDØ!Ÿ.™.¨¨1©Ó.ñ/õ 0ð �1‘˜’Ø—	‘	˜%Ø!Ÿ.™.¨¨1©Ó.ñ/à%ñ&ð "Ÿ.™.¨¨1©Ó.ñ/õ 0ð �1‘˜“Ø!Ÿ.™.¨¨1©Ó.�Ü˜a ™d¤CÔ(Ø$ wÑ.�GØ×%Ñ% cÔ*Ø% a b˜k�GØ %‘Ià %�IØ—	‘	˜) gÑ-°·±¸qÀ¹tÓ0DÑDØ%ñ&Ø(/¯©°q¸±tÓ(<ñ=ö >ð-	>ð0 —‘˜“ˆØ×Ñ˜UÔ#Ø˜A˜B�ZˆFð ˆð ×Ñ˜sÔ#Ø˜A˜B�ZˆFØˆr   c                 ó2   ‡‡— | Š G ˆˆfd„d«      } |«       S )Nc                   ó   •— e Zd ZdZˆ ˆfd„Zy)úDyadic._pretty.<locals>.Faker   c                 ój  •— ‰j                   }‰}t        |«      dk(  rt        d«      S ‰j                  rdnd}g }|D �]3  }|d   dk(  r:|j	                  d|j                  |d   «      ||j                  |d   «      g«       ŒF|d   dk(  r:|j	                  d|j                  |d   «      ||j                  |d   «      g«       Œˆ|d   dk7  sŒ‘t        |d   t        «      r&|j                  |d   «      j                  «       d   }n|j                  |d   «      }|j                  d	«      r|dd  }d}	nd}	|j	                  |	|d
|j                  |d   «      ||j                  |d   «      g«       �Œ6 dj                  |«      }
|
j                  d«      r|
dd  }
|
S |
j                  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Ó   sÌ  ø€ Ø—V‘V�Ø�Ü�r“7˜a’<Ü˜q›6�MØ-4×-AÒ-AÑ)Às�Ø�Øó 6�Aà˜‘t˜q’yØŸ	™	 5Ø"%§+¡+¨a°©dÓ"3Ø"%Ø"%§+¡+¨a°©dÓ"3ð#5õ 6ð ˜1™ šØŸ	™	 5Ø"%§+¡+¨a°©dÓ"3Ø"%Ø"%§+¡+¨a°©dÓ"3ð#5õ 6ð ˜1™ ›Ü% a¨¡d¬CÔ0Ø&)§j¡jØ ! !¡ó'&ß&,¡f£h¨qñ'2™Gð '*§k¡k°!°A±$Ó&7˜GØ"×-Ñ-¨cÔ2Ø&-¨a¨b k˜GØ(-™Ià(-˜IØŸ	™	 9¨g°sØ"%§+¡+¨a°©dÓ"3Ø"%Ø"%§+¡+¨a°©dÓ"3ð#5ö 6ð96ðB Ÿ™ ›�Ø×$Ñ$ UÔ+Ø# A B˜Z�Fð �ð ×&Ñ& sÔ+Ø# A B˜Z�FØ�r   N)Ú__name__Ú
__module__Ú__qualname__Úbaseliner^   )r]   rK   s   €€r   ÚFakerS   Ð   s   ø„ ØˆHö-r   rc   r9   )r   rK   rc   r]   s    ` @r   Ú_prettyzDyadic._prettyÍ   s   ù€ Øˆ÷0	ô 0	ñb ‹vˆr   c                 ó   — d| z  |z   S r<   r9   r!   s     r   Ú__rsub__zDyadic.__rsub__  s   € Ø�T‘	˜UÑ"Ð"r   c                 ó4  — | j                   }t        |«      dk(  r|j                  d«      S g }|D �]%  }|d   dk(  rB|j                  d|j                  |d   «      z   dz   |j                  |d   «      z   dz   «       ŒN|d   dk(  rB|j                  d|j                  |d   «      z   dz   |j                  |d   «      z   dz   «       Œ˜|d   dk7  sŒ¡|j                  |d   «      }t	        |d   t
        «      rd	|z  }|d   d
k(  r|dd }d}nd}|j                  ||z   dz   |j                  |d   «      z   dz   |j                  |d   «      z   dz   «       �Œ( dj                  |«      }|j                  d«      r|dd }|S |j                  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  sÎ  € à�Y‰YˆÜˆr‹7�aŠ<Ø—>‘> !Ó$Ð$ØˆØó 	<ˆAà�‰t�qŠyØ—	‘	˜& 7§>¡>°!°A±$Ó#7Ñ7¸#Ñ=Ø!Ÿ.™.¨¨1©Ó.ñ/Ø14ñ5õ 6ð �1‘˜’Ø—	‘	˜& 7§>¡>°!°A±$Ó#7Ñ7¸#Ñ=Ø!Ÿ.™.¨¨1©Ó.ñ/Ø14ñ5õ 6ð �1‘˜“Ø!Ÿ.™.¨¨1©Ó.�Ü˜a ™d¤CÔ(Ø$ wÑ.�GØ˜1‘: Ò$Ø% a b˜k�GØ %‘Ià %�IØ—	‘	˜) gÑ-°Ñ4Ø!Ÿ.™.¨¨1©Ó.ñ/àñà '§¡¨q°©tÓ 4ñ5à7:ñ;ö <ð)	<ð. —‘˜“ˆØ×Ñ˜UÔ#Ø˜A˜B�ZˆFð ˆð ×Ñ˜sÔ#Ø˜A˜B�ZˆFØˆr   c                 ó*   — | j                  |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 ]1  }||d   |d   j	                  |d   j                  |«      «      z  z  }Œ3 |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ˆØ—‘ò 	;ˆAØ�!�A‘$˜!˜A™$Ÿ*™* a¨¡d§j¡j°Ó&7Ó9Ñ:Ñ:‰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   € õ@ 	;Ù�t˜V VÓ,Ð,r   c           
      ó¶   — |€|}t        |D ��cg c])  }|D ]"  }|j                  | «      j                  |«      ‘Œ$ Œ+ c}}«      j                  dd«      S c c}}w )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]])

        rE   )ÚMatrixr.   Úreshape)r   Úreference_frameÚsecond_reference_framer   Újs        r   Ú	to_matrixzDyadic.to_matrixm  sb   € ðV "Ð)Ø%4Ð"ä°?÷ .¨aØ,ò.Àq�q—u‘u˜T“{—‘ qÕ)ð .Ð)ó .ó /ß/6©w°q¸!«}ð	=ùó .s   �.A
c                 ó²   — t        | j                  D �cg c]*  }t         |d   j                  di |¤Ž|d   |d   fg«      ‘Œ, c}t        d«      «      S c c}w )z(Calls .doit() on each term in the Dyadicr   r   r   r9   )Úsumr   r	   Údoit)r   Úhintsr   s      r   r|   zDyadic.doitž  s^   € äØ!ŸY™Yö(Øô ˜Y˜Q˜q™TŸY™YÑ/¨Ñ/°°1±°q¸±tÐ<Ð=Õ>ò (Ü)/°«ó4ð 	4ùò (ó   ”/A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Ù˜t UÓ+Ð+r   c                 ó�   — t        d«      }| j                  D ]+  }|t        |d   j                  «       |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¿  sN   € ä�Q‹iˆØ—‘ò 	;ˆAØ”6˜A˜a™DŸM™M›O¨Q¨q©T°1°Q±4Ð8Ð9Ó:Ñ:‰Cð	;àˆ
r   c                 ó²   — t        | j                  D �cg c]*  }t         |d   j                  |i |¤Ž|d   |d   fg«      ‘Œ, c}t        d«      «      S c c}w )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)

        r   r   r   )r{   r   r	   Úsubs)r   r   rZ   r   s       r   r‡   zDyadic.subsÆ  sb   € ô  Ø!ŸY™Yö(Øô ˜Y˜Q˜q™TŸY™Y¨Ð7°Ñ7¸¸1¹¸qÀ¹tÐDÐEÕFò (Ü)/°«ó4ð 	4ùò (r~   c                 ó¬   — t        |«      st        d«      ‚t        d«      }| j                  D ]#  \  }}}| ||«      |j	                  |«      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Ù  sW   € ä˜Œ{ÜÐ3Ó4Ð4ä�Q‹iˆØ—y‘yò 	'‰GˆAˆq�!Ø‘1�Q“4˜1Ÿ7™7 1›:Ñ&Ñ&‰Cð	'àˆ
r   c                 óê   — | j                   s| S g }t        |«      }| j                   D ]?  }t        |«      }|d   j                  |¬«      |d<   |j	                  t        |«      «       ŒA t        |«      S )Nr   )Ún)r   r   r%   Úevalfr   Útupler	   )r   ÚprecÚnew_argsÚdpsr   Ú
new_inlists         r   Ú_eval_evalfzDyadic._eval_evalfã  so   € Ø�yŠyØˆKØˆÜ˜$ÓˆØ—i‘iò 	/ˆFÜ˜f›ˆJØ" 1™IŸO™O¨c˜OÓ2ˆJ�q‰MØ�O‰OœE *Ó-Õ.ð	/ô �hÓÐr   c                 ó¶   — g }| j                   D ]>  }t        |«      }|d   j                  |«      |d<   |j                  t	        |«      «       Œ@ t        |«      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î  s\   € ðP ˆØ—i‘iò 	/ˆFÜ˜f›ˆJØ& q™M×2Ñ2°4Ó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   ry   r|   r‚   r„   r‡   r�   r˜   rš   r9   r   r   r	   r	      s¸   „ ñ
ð €Iò$ðL ñó ðò.ð
 €Hòð4 €Hò"ðJ €Gò'ò1ò !òò"òH4òl#ò"òH(òð4 €Gó!-óF/=òb4ò
,ò8ò4ò&ò	 ó- r   c                 ó<   — t        | t        «      st        d«      ‚| S )NzA Dyadic must be supplied)r-   r	   rŠ   )r"   s    r   r    r      s   € Ü�eœVÔ$ÜÐ3Ó4Ð4Ø€Lr   N)Úsympyr   r   r   rt   Úsympy.core.evalfr   Úsympy.printing.defaultsr   Úmpmath.libmp.libmpfr   Ú__all__r	   r    r9   r   r   ú<module>r©      s3   ðß 9Ñ 9Ý 'Ý -å +ð ˆ*€ôP ˆY˜
ô P ófr   