
    sg	                     L    d dl mZmZ d dlmZmZ d dlmZ dgZ G d de      Z	y)    )ABCabstractmethod)Symbolsympify)PointBodyBasec                      e Zd ZdZddZd Zd Zed        Zed        Z	e	j                  d        Z	ed	        Zej                  d
        Zed        Zej                  d        Zed        Zed        Zed        Zed        Zy)r   z%Abstract class for body type objects.Nc                     t        |t              st        d      || _        |t	        | d      }|t        | d      }|| _        || _        d| _        g | _	        y )NzSupply a valid name._mass_masscenterr   )

isinstancestr	TypeError_namer   r   mass
masscenterpotential_energypoints)selfnamer   r   s       T/var/www/html/venv/lib/python3.12/site-packages/sympy/physics/mechanics/body_base.py__init__zBodyBase.__init__
   sj     $$233
<TF%.)D${34J	$ !    c                     | j                   S N)r   r   s    r   __str__zBodyBase.__str__   s    yyr   c           	          | j                   j                   dt        | j                         dt        | j                         dt        | j
                         dS )N(z, masscenter=z, mass=))	__class____name__reprr   r   r   r   s    r   __repr__zBodyBase.__repr__   sO    >>**+1T$))_,=]()dii0AD 	Er   c                     | j                   S )zThe name of the body.)r   r   s    r   r   zBodyBase.name         zzr   c                     | j                   S )zThe body's center of mass.)r   r   s    r   r   zBodyBase.masscenter%   s     r   c                 H    t        |t              st        d      || _        y )Nz1The body's center of mass must be a Point object.)r   r   r   r   )r   points     r   r   zBodyBase.masscenter*   s     %'OPP r   c                     | j                   S )zThe body's mass.)r   r   s    r   r   zBodyBase.mass0   r&   r   c                 $    t        |      | _        y r   )r   r   )r   r   s     r   r   zBodyBase.mass5   s    T]
r   c                     | j                   S )as  The potential energy of the body.

        Examples
        ========

        >>> from sympy.physics.mechanics import Particle, Point
        >>> from sympy import symbols
        >>> m, g, h = symbols('m g h')
        >>> O = Point('O')
        >>> P = Particle('P', O, m)
        >>> P.potential_energy = m * g * h
        >>> P.potential_energy
        g*h*m

        )_potential_energyr   s    r   r   zBodyBase.potential_energy9   s    " %%%r   c                 $    t        |      | _        y r   )r   r-   )r   scalars     r   r   zBodyBase.potential_energyL   s    !(r   c                      y r    r   frames     r   kinetic_energyzBodyBase.kinetic_energyP       r   c                      y r   r1   r2   s     r   linear_momentumzBodyBase.linear_momentumT   r5   r   c                      y r   r1   r   r)   r3   s      r   angular_momentumzBodyBase.angular_momentumX   r5   r   c                      y r   r1   r9   s      r   parallel_axiszBodyBase.parallel_axis\   r5   r   )NN)r"   
__module____qualname____doc__r   r   r$   propertyr   r   setterr   r   r   r4   r7   r:   r<   r1   r   r   r   r      s   /E       ! !
   
[[# # & &$ 1 1        r   N)
abcr   r   sympyr   r   sympy.physics.vectorr   __all__r   r1   r   r   <module>rF      s#    # ! &,Vs Vr   