ó
¡¼™\c           @  si   d  d l  m Z m Z d  d l m Z d  d l m Z d  d l m Z d g Z	 d e
 f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   print_functiont   division(   t   sympify(   t   string_types(   t   Pointt   Particlec           B  s¤   e  Z d  Z d „  Z d „  Z e Z e d „  ƒ Z e j d „  ƒ Z e d „  ƒ Z	 e	 j d „  ƒ Z	 d „  Z
 d „  Z d	 „  Z e d
 „  ƒ Z e j d „  ƒ Z RS(   sû  A particle.

    Particles have a non-zero mass and lack spatial extension; they take up no
    space.

    Values need to be supplied on initialization, but can be changed later.

    Parameters
    ==========
    name : str
        Name of particle
    point : Point
        A physics/mechanics Point which represents the position, velocity, and
        acceleration of this Particle
    mass : sympifyable
        A SymPy expression representing the Particle's mass

    Examples
    ========

    >>> from sympy.physics.mechanics import Particle, Point
    >>> from sympy import Symbol
    >>> po = Point('po')
    >>> m = Symbol('m')
    >>> pa = Particle('pa', po, m)
    >>> # Or you could change these later
    >>> pa.mass = m
    >>> pa.point = po

    c         C  sF   t  | t ƒ s t d ƒ ‚ n  | |  _ | |  _ | |  _ d |  _ d  S(   Ns   Supply a valid name.i    (   t
   isinstanceR   t	   TypeErrort   _namet   masst   pointt   potential_energy(   t   selft   nameR
   R	   (    (    s?   lib/python2.7/site-packages/sympy/physics/mechanics/particle.pyt   __init__*   s    			c         C  s   |  j  S(   N(   R   (   R   (    (    s?   lib/python2.7/site-packages/sympy/physics/mechanics/particle.pyt   __str__2   s    c         C  s   |  j  S(   s   Mass of the particle.(   t   _mass(   R   (    (    s?   lib/python2.7/site-packages/sympy/physics/mechanics/particle.pyR	   7   s    c         C  s   t  | ƒ |  _ d  S(   N(   R   R   (   R   t   value(    (    s?   lib/python2.7/site-packages/sympy/physics/mechanics/particle.pyR	   <   s    c         C  s   |  j  S(   s   Point of the particle.(   t   _point(   R   (    (    s?   lib/python2.7/site-packages/sympy/physics/mechanics/particle.pyR
   @   s    c         C  s+   t  | t ƒ s t d ƒ ‚ n  | |  _ d  S(   Ns0   Particle point attribute must be a Point object.(   R   R   R   R   (   R   t   p(    (    s?   lib/python2.7/site-packages/sympy/physics/mechanics/particle.pyR
   E   s    c         C  s   |  j  |  j j | ƒ S(   s  Linear momentum of the particle.

        The linear momentum L, of a particle P, with respect to frame N is
        given by

        L = m * v

        where m is the mass of the particle, and v is the velocity of the
        particle in the frame N.

        Parameters
        ==========

        frame : ReferenceFrame
            The frame in which linear momentum is desired.

        Examples
        ========

        >>> from sympy.physics.mechanics import Particle, Point, ReferenceFrame
        >>> from sympy.physics.mechanics import dynamicsymbols
        >>> m, v = dynamicsymbols('m v')
        >>> N = ReferenceFrame('N')
        >>> P = Point('P')
        >>> A = Particle('A', P, m)
        >>> P.set_vel(N, v * N.x)
        >>> A.linear_momentum(N)
        m*v*N.x

        (   R	   R
   t   vel(   R   t   frame(    (    s?   lib/python2.7/site-packages/sympy/physics/mechanics/particle.pyt   linear_momentumK   s     c         C  s'   |  j  j | ƒ |  j |  j  j | ƒ AS(   s  Angular momentum of the particle about the point.

        The angular momentum H, about some point O of a particle, P, is given
        by:

        H = r x m * v

        where r is the position vector from point O to the particle P, m is
        the mass of the particle, and v is the velocity of the particle in
        the inertial frame, N.

        Parameters
        ==========

        point : Point
            The point about which angular momentum of the particle is desired.

        frame : ReferenceFrame
            The frame in which angular momentum is desired.

        Examples
        ========

        >>> from sympy.physics.mechanics import Particle, Point, ReferenceFrame
        >>> from sympy.physics.mechanics import dynamicsymbols
        >>> m, v, r = dynamicsymbols('m v r')
        >>> N = ReferenceFrame('N')
        >>> O = Point('O')
        >>> A = O.locatenew('A', r * N.x)
        >>> P = Particle('P', A, m)
        >>> P.point.set_vel(N, v * N.y)
        >>> P.angular_momentum(O, N)
        m*r*v*N.z

        (   R
   t   pos_fromR	   R   (   R   R
   R   (    (    s?   lib/python2.7/site-packages/sympy/physics/mechanics/particle.pyt   angular_momentumm   s    %c         C  s1   |  j  t d ƒ |  j j | ƒ |  j j | ƒ @S(   sw  Kinetic energy of the particle

        The kinetic energy, T, of a particle, P, is given by

        'T = 1/2 m v^2'

        where m is the mass of particle P, and v is the velocity of the
        particle in the supplied ReferenceFrame.

        Parameters
        ==========

        frame : ReferenceFrame
            The Particle's velocity is typically defined with respect to
            an inertial frame but any relevant frame in which the velocity is
            known can be supplied.

        Examples
        ========

        >>> from sympy.physics.mechanics import Particle, Point, ReferenceFrame
        >>> from sympy import symbols
        >>> m, v, r = symbols('m v r')
        >>> N = ReferenceFrame('N')
        >>> O = Point('O')
        >>> P = Particle('P', O, m)
        >>> P.point.set_vel(N, v * N.y)
        >>> P.kinetic_energy(N)
        m*v**2/2

        i   (   R	   R   R
   R   (   R   R   (    (    s?   lib/python2.7/site-packages/sympy/physics/mechanics/particle.pyt   kinetic_energy”   s    ! c         C  s   |  j  S(   sw  The potential energy of the Particle.

        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

        (   t   _pe(   R   (    (    s?   lib/python2.7/site-packages/sympy/physics/mechanics/particle.pyR   ¸   s    c         C  s   t  | ƒ |  _ d S(   sØ  Used to set the potential energy of the Particle.

        Parameters
        ==========

        scalar : Sympifyable
            The potential energy (a scalar) of the Particle.

        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

        N(   R   R   (   R   t   scalar(    (    s?   lib/python2.7/site-packages/sympy/physics/mechanics/particle.pyR   Ì   s    (   t   __name__t
   __module__t   __doc__R   R   t   __repr__t   propertyR	   t   setterR
   R   R   R   R   (    (    (    s?   lib/python2.7/site-packages/sympy/physics/mechanics/particle.pyR   
   s   			"	'	$N(   t
   __future__R    R   t   sympy.core.backendR   t   sympy.core.compatibilityR   t   sympy.physics.vectorR   t   __all__t   objectR   (    (    (    s?   lib/python2.7/site-packages/sympy/physics/mechanics/particle.pyt   <module>   s
   	