+
    i              
           ^ RI Ht ^ RIHt ^ RIHt ^ RIHtHtH	t	 . ROt
 ! R R]]! RR	R
.4      4      t ! R R]4      t ! R R]4      tR tR tR# )    )ABC)
namedtuple)BodyBase)VectorReferenceFramePointLoadBaseForceTorquec                   8   a  ] tR t^	t o RtR tR t]t]tRt	V t
R# )r	   z2Abstract base class for the various loading types.c                v    \        R V P                  P                   RVP                  P                   R24      h)z$unsupported operand type(s) for +: '' and ''	TypeError	__class____name__selfothers   &&}/Users/tonyclaw/.openclaw/workspace/skills/math-calculator/venv/lib/python3.14/site-packages/sympy/physics/mechanics/loads.py__add__LoadBase.__add__   @      NN334 5!OO445Q8 9 	9    c                v    \        R V P                  P                   RVP                  P                   R24      h)z$unsupported operand type(s) for *: 'r   r   r   r   s   &&r   __mul__LoadBase.__mul__   r   r    N)r   
__module____qualname____firstlineno____doc__r   r   __radd____rmul____static_attributes____classdictcell__)__classdict__s   @r   r	   r	   	   s     <9
9
 HHr   locationvectorc                   \   a a ] tR t^t oRtV 3R ltR t]R 4       t]R 4       t	Rt
VtV ;t# )r
   a  Force acting upon a point.

Explanation
===========

A force is a vector that is bound to a line of action. This class stores
both a point, which lies on the line of action, and the vector. A tuple can
also be used, with the location as the first entry and the vector as second
entry.

Examples
========

A force of magnitude 2 along N.x acting on a point Po can be created as
follows:

>>> from sympy.physics.mechanics import Point, ReferenceFrame, Force
>>> N = ReferenceFrame('N')
>>> Po = Point('Po')
>>> Force(Po, 2 * N.x)
(Po, 2*N.x)

If a body is supplied, then the center of mass of that body is used.

>>> from sympy.physics.mechanics import Particle
>>> P = Particle('P', point=Po)
>>> Force(P, 2 * N.x)
(Po, 2*N.x)

c                   < \        V\        4      '       d   VP                  p\        V\        4      '       g   \	        R 4      h\        V\
        4      '       g   \	        R4      h\        SV `  WV4      # )z!Force location should be a Point.z Force vector should be a Vector.)
isinstancer   
masscenterr   r   r   super__new__)clspointforcer   s   &&&r   r0   Force.__new__:   s^    eX&&$$E%''?@@%((>??ws511r   c                h    V P                   P                   R V P                   RV P                   R2# )z(point=z, force=))r   r   r2   r3   r   s   &r   __repr__Force.__repr__C   s6    >>**+74::, ?A' 	(r   c                    V P                   # Nr)   r7   s   &r   r2   Force.pointG       }}r   c                    V P                   # r;   r*   r7   s   &r   r3   Force.forceK       {{r   r   )r   r    r!   r"   r#   r0   r8   propertyr2   r3   r&   r'   __classcell__r   r(   s   @@r   r
   r
      sA     >2(     r   c                   \   a a ] tR t^Pt oRtV 3R ltR t]R 4       t]R 4       t	Rt
VtV ;t# )r   a  Torque acting upon a frame.

Explanation
===========

A torque is a free vector that is acting on a reference frame, which is
associated with a rigid body. This class stores both the frame and the
vector. A tuple can also be used, with the location as the first item and
the vector as second item.

Examples
========

A torque of magnitude 2 about N.x acting on a frame N can be created as
follows:

>>> from sympy.physics.mechanics import ReferenceFrame, Torque
>>> N = ReferenceFrame('N')
>>> Torque(N, 2 * N.x)
(N, 2*N.x)

If a body is supplied, then the frame fixed to that body is used.

>>> from sympy.physics.mechanics import RigidBody
>>> rb = RigidBody('rb', frame=N)
>>> Torque(rb, 2 * N.x)
(N, 2*N.x)

c                   < \        V\        4      '       d   VP                  p\        V\        4      '       g   \	        R 4      h\        V\
        4      '       g   \	        R4      h\        SV `  WV4      # )z+Torque location should be a ReferenceFrame.z!Torque vector should be a Vector.)r-   r   framer   r   r   r/   r0   )r1   rH   torquer   s   &&&r   r0   Torque.__new__o   s\    eX&&KKE%00IJJ&&))?@@ws622r   c                h    V P                   P                   R V P                   RV P                   R2# )z(frame=z	, torque=r6   )r   r   rH   rI   r7   s   &r   r8   Torque.__repr__x   s6    >>**+74::, ?++a) 	*r   c                    V P                   # r;   r<   r7   s   &r   rH   Torque.frame|   r>   r   c                    V P                   # r;   r@   r7   s   &r   rI   Torque.torque   rB   r   r   )r   r    r!   r"   r#   r0   r8   rC   rH   rI   r&   r'   rD   rE   s   @@r   r   r   P   sA     <3*     r   c                    . pV Ff  p\        V\        4      '       g   \        \        V4       R24      hVP	                  \        VP                  VP                  V ,          4      4       Kh  	  V# )a  
Returns a list of gravity forces given the acceleration
due to gravity and any number of particles or rigidbodies.

Example
=======

>>> from sympy.physics.mechanics import ReferenceFrame, Particle, RigidBody
>>> from sympy.physics.mechanics.loads import gravity
>>> from sympy import symbols
>>> N = ReferenceFrame('N')
>>> g = symbols('g')
>>> P = Particle('P')
>>> B = RigidBody('B')
>>> gravity(g*N.y, P, B)
[(P_masscenter, P_mass*g*N.y),
 (B_masscenter, B_mass*g*N.y)]

z is not a body type)r-   r   r   typeappendr
   r.   mass)accelerationbodiesgravity_forcebodys   &*  r   gravityrY      sa    * M$))tDzl*=>??U4??DII4LMN  r   c                   \        V \        4      '       d   V # \        V \        4      '       d   \        V 4      ^8w  d   \	        RV  R24      h\        V ^ ,          \
        4      '       d   \        V ^ ,          V ^,          4      # \        V ^ ,          \        4      '       d   \        V ^ ,          V ^,          4      # \	        RV ^ ,           R24      h\        R\        V 4       R24      h)zBHelper function to parse loads and convert tuples to load objects.zLoad z should have a length of 2.z'Load not recognized. The load location z. should either be a Point or a ReferenceFrame.z
Load type zA not recognized as a load. It should be a Force, Torque or tuple.)r-   r	   tuplelen
ValueErrorr   r
   r   r   r   rR   )loads   &r   _parse_loadr_      s    $!!	D%	 	 t9>uTF*EFGGd1gu%%a$q'**Q00$q'47++FtAwiMO P P
jd -: ; < <r   N)r	   r
   r   )abcr   collectionsr   !sympy.physics.mechanics.body_baser   sympy.physics.vectorr   r   r   __all__r	   r
   r   rY   r_   r   r   r   <module>re      sW     " 6 > >
)sJzJ+AB "3H 3l2X 2j:<r   