ó
~9­\c           @   s–   d  d l  m Z d  d l m Z m Z m Z m Z d  d l m Z m Z m	 Z	 d  d l m
 Z
 d  d l m Z d „  Z d „  Z d „  Z d	 „  Z d
 S(   iÿÿÿÿ(   t   symbols(   t   Pointt   ReferenceFramet   Dyadict	   RigidBody(   t   dynamicsymbolst   outert   inertia(   t   inertia_of_point_mass(   t   expandc          C   s  t  d ƒ \ }  } } } } } t d ƒ } t d ƒ } t d ƒ } t d ƒ }	 t d ƒ }
 t d ƒ } t d | | |  |
 | f ƒ } | j |  k s™ t ‚ | j | k s® t ‚ | j | k sÃ t ‚ | j	 |
 | j f k sá t ‚ | | _ | | _ |	 | _ | | j f | _	 | j | k s#t ‚ | j | k s8t ‚ | j |	 k sMt ‚ | j	 | | j f k skt ‚ | j |	 k s€t ‚ | j	 | | j f k sžt ‚ t d ƒ } |	 j
 | | | j | | j | | j ƒ | j | ƒ | | | j | | j | | j k st ‚ d  S(	   Ns   m m2 v1 v2 v3 omegat   At   A2t   Pt   P2i    t   Bt   N(   R    R   R   R   R   t   masst   AssertionErrort   framet
   masscenterR   t   set_velt   xt   yt   zt   linear_momentum(   t   mt   m2t   v1t   v2t   v3t   omegaR
   R   R   R   t   It   I2R   R   (    (    sK   lib/python2.7/site-packages/sympy/physics/mechanics/tests/test_rigidbody.pyt   test_rigidbody   s2    			-c          C   s§  t  d ƒ \ }  } } } } } t d ƒ } t d ƒ } | j | | | j ƒ t d ƒ } t | j | j ƒ }	 |	 | f }
 t d | | |  |
 ƒ } | j | | | j ƒ | j | | ƒ | | j k sÎ t	 ‚ t d ƒ } | j | | | j ƒ | j
 | | | j ƒ | j | | ƒ | | j |  | | | j k s@t	 ‚ |  | | | _ | j |  | | k snt	 ‚ t d | j | ƒ ƒ | d |  | d k s£t	 ‚ d  S(   Ns   M v r omega g hR   t   bR   R   t   Oi   (   R   R   t   set_ang_velR   R   R   R   R   t   angular_momentumR   t   set_posR   R   t   potential_energyR	   t   kinetic_energy(   t   Mt   vt   rR   t   gt   hR   R"   R   R   t   Inertia_tupleR   R#   (    (    sK   lib/python2.7/site-packages/sympy/physics/mechanics/tests/test_rigidbody.pyt   test_rigidbody2'   s"    %8c       
   C   sŽ  t  d ƒ \ }  } } } t d ƒ \ } } } t d ƒ } t d ƒ } | j d d |  | j g ƒ }	 t d ƒ }
 |
 j | | | j | | j | | j ƒ |
 j	 d | |	 j | |	 j | |	 j ƒ } | j
 |
 | |	 ƒ t |	 j |	 j ƒ } t d	 | |	 | | | f ƒ } t d
 | |	 | | t | | j |
 ƒ |	 ƒ |
 f ƒ } | j | j k s`t ‚ | j |
 | ƒ | j |
 | ƒ k sŠt ‚ d  S(   Ns   q1:5s   p1:4R   R
   R   t   axisR#   R   t   rb1t   rb2(   R   R    R   t	   orientnewR   R   R   R   R   t	   locatenewt   v2pt_theoryR   R   R   t   pos_fromt   central_inertiaR   R%   (   t   q1t   q2t   q3t   q4t   p1t   p2t   p3R   R
   R   R#   R   R   R1   R2   (    (    sK   lib/python2.7/site-packages/sympy/physics/mechanics/tests/test_rigidbody.pyt   test_rigidbody3:   s    -/(c    
      C   sx  t  d ƒ \ }  } t d ƒ } t d ƒ } | j d d | | j g ƒ } | j | | j ƒ  | j ƒ t | d |  | d d |  | d d ƒ } t d	 ƒ } | j	 d
 d | | j
 ƒ } | j	 d | | j
 ƒ } t d | | |  | | f ƒ }	 | j | d ƒ | j | | | ƒ | j | | | ƒ d |  | d d | j ƒ  | j |	 j | | ƒ j | ƒ d k stt ‚ d S(   sò   Consider a pendulum of length OA = 2a, of mass m as a rigid body of
    center of mass G (OG = a) which turn around (O,z). The angle between the
    reference frame R and the rod is q.  The inertia of the body is I =
    (G,0,ma^2/3,ma^2/3). s   m, at   qt   Rt   R1t   Axisi    i   i   R#   R
   t   Gt   Si   N(   R    R   R   R3   R   R$   t   diffR   R   R4   R   R   R   R5   R%   t   expressR   (
   R   t   aR@   RA   RB   R   R#   R
   RD   RE   (    (    sK   lib/python2.7/site-packages/sympy/physics/mechanics/tests/test_rigidbody.pyt   test_pendulum_angular_momentumP   s    -$N(   t   sympyR    t   sympy.physics.mechanicsR   R   R   R   R   R   R   R   t   sympy.core.backendR	   R!   R/   R?   RI   (    (    (    sK   lib/python2.7/site-packages/sympy/physics/mechanics/tests/test_rigidbody.pyt   <module>   s   "			