class_docstr: Torque-producing actuator.
  
  Explanation
  ===========
  
  A ``TorqueActuator`` is an actuator that produces a pair of equal and
  opposite torques on a pair of bodies.
  
  Examples
  ========
  
  To construct a torque actuator, an expression (or symbol) must be supplied
  to represent the torque it can produce, alongside a vector specifying the
  axis about which the torque will act, and a pair of frames on which the
  torque will act.
  
  >>> from sympy import symbols
  >>> from sympy.physics.mechanics import (ReferenceFrame, RigidBody,
  ...     TorqueActuator)
  >>> N = ReferenceFrame('N')
  >>> A = ReferenceFrame('A')
  >>> torque = symbols('T')
  >>> axis = N.z
  >>> parent = RigidBody('parent', frame=N)
  >>> child = RigidBody('child', frame=A)
  >>> bodies = (child, parent)
  >>> actuator = TorqueActuator(torque, axis, *bodies)
  >>> actuator
  TorqueActuator(T, axis=N.z, target_frame=A, reaction_frame=N)
  
  Note that because torques actually act on frames, not bodies,
  ``TorqueActuator`` will extract the frame associated with a ``RigidBody``
  when one is passed instead of a ``ReferenceFrame``.
  
  Parameters
  ==========
  
  torque : Expr
      The scalar expression defining the torque that the actuator produces.
  axis : Vector
      The axis about which the actuator applies torques.
  target_frame : ReferenceFrame | RigidBody
      The primary frame on which the actuator will apply the torque.
  reaction_frame : ReferenceFrame | RigidBody | None
      The secondary frame on which the actuator will apply the torque. Note
      that the (equal and opposite) reaction torque is applied to this frame.
docstr: Loads required by the equations of motion method classes.
  
  Explanation
  ===========
  
  ``KanesMethod`` requires a list of ``Point``-``Vector`` tuples to be
  passed to the ``loads`` parameters of its ``kanes_equations`` method
  when constructing the equations of motion. This method acts as a
  utility to produce the correctly-structred pairs of points and vectors
  required so that these can be easily concatenated with other items in
  the list of loads and passed to ``KanesMethod.kanes_equations``. These
  loads are also in the correct form to also be passed to the other
  equations of motion method classes, e.g. ``LagrangesMethod``.
  
  Examples
  ========
  
  The below example shows how to generate the loads produced by a torque
  actuator that acts on a pair of bodies attached by a pin joint.
  
  >>> from sympy import symbols
  >>> from sympy.physics.mechanics import (PinJoint, ReferenceFrame,
  ...     RigidBody, TorqueActuator)
  >>> torque = symbols('T')
  >>> N = ReferenceFrame('N')
  >>> A = ReferenceFrame('A')
  >>> parent = RigidBody('parent', frame=N)
  >>> child = RigidBody('child', frame=A)
  >>> pin_joint = PinJoint(
  ...     'pin',
  ...     parent,
  ...     child,
  ...     joint_axis=N.z,
  ... )
  >>> actuator = TorqueActuator.at_pin_joint(torque, pin_joint)
  
  The forces produces by the damper can be generated by calling the
  ``to_loads`` method.
  
  >>> actuator.to_loads()
  [(A, T*N.z), (N, - T*N.z)]
  
  Alternatively, if a torque actuator is created without a reaction frame
  then the loads returned by the ``to_loads`` method will contain just
  the single load acting on the target frame.
  
  >>> actuator = TorqueActuator(torque, N.z, N)
  >>> actuator.to_loads()
  [(N, T*N.z)]
docstr_tok: ["Loads","required","by","the","equations","of","motion","method","classes",".","Explanation","===========","``","KanesMethod","``","requires","a","list","of","``","Point","``","-","``","Vector","``","tuples","to","be","passed","to","the","``","loads","``","parameters","of","its","``","kanes_equations","``","method","when","constructing","the","equations","of","motion",".","This","method","acts","as","a","utility","to","produce","the","correctly-structred","pairs","of","points","and","vectors","required","so","that","these","can","be","easily","concatenated","with","other","items","in","the","list","of","loads","and","passed","to","``","KanesMethod.kanes_equations","``",".","These","loads","are","also","in","the","correct","form","to","also","be","passed","to","the","other","equations","of","motion","method","classes",",","e.g",".","``","LagrangesMethod","``",".","Examples","========","The","below","example","shows","how","to","generate","the","loads","produced","by","a","torque","actuator","that","acts","on","a","pair","of","bodies","attached","by","a","pin","joint",".",">",">",">","from","sympy","import","symbols",">",">",">","from","sympy.physics.mechanics","import","(","PinJoint",",","ReferenceFrame",",","...","RigidBody",",","TorqueActuator",")",">",">",">","torque","=","symbols","(","'T","'",")",">",">",">","N","=","ReferenceFrame","(","'N","'",")",">",">",">","A","=","ReferenceFrame","(","'","A","'",")",">",">",">","parent","=","RigidBody","(","'parent","'",",","frame=N",")",">",">",">","child","=","RigidBody","(","'child","'",",","frame=A",")",">",">",">","pin_joint","=","PinJoint","(","...","'pin","'",",","...","parent",",","...","child",",","...","joint_axis=N.z",",","...",")",">",">",">","actuator","=","TorqueActuator.at_pin_joint","(","torque",",","pin_joint",")","The","forces","produces","by","the","damper","can","be","generated","by","calling","the","``","to_loads","``","method",".",">",">",">","actuator.to_loads","(",")","[","(","A",",","T","*","N.z",")",",","(","N",",","-","T","*","N.z",")","]","Alternatively",",","if","a","torque","actuator","is","created","without","a","reaction","frame","then","the","loads","returned","by","the","``","to_loads","``","method","will","contain","just","the","single","load","acting","on","the","target","frame",".",">",">",">","actuator","=","TorqueActuator","(","torque",",","N.z",",","N",")",">",">",">","actuator.to_loads","(",")","[","(","N",",","T","*","N.z",")","]"]
code: def to_loads(self):
      """Loads required by the equations of motion method classes.
  
      Explanation
      ===========
  
      ``KanesMethod`` requires a list of ``Point``-``Vector`` tuples to be
      passed to the ``loads`` parameters of its ``kanes_equations`` method
      when constructing the equations of motion. This method acts as a
      utility to produce the correctly-structred pairs of points and vectors
      required so that these can be easily concatenated with other items in
      the list of loads and passed to ``KanesMethod.kanes_equations``. These
      loads are also in the correct form to also be passed to the other
      equations of motion method classes, e.g. ``LagrangesMethod``.
  
      Examples
      ========
  
      The below example shows how to generate the loads produced by a torque
      actuator that acts on a pair of bodies attached by a pin joint.
  
      >>> from sympy import symbols
      >>> from sympy.physics.mechanics import (PinJoint, ReferenceFrame,
      ...     RigidBody, TorqueActuator)
      >>> torque = symbols('T')
      >>> N = ReferenceFrame('N')
      >>> A = ReferenceFrame('A')
      >>> parent = RigidBody('parent', frame=N)
      >>> child = RigidBody('child', frame=A)
      >>> pin_joint = PinJoint(
      ...     'pin',
      ...     parent,
      ...     child,
      ...     joint_axis=N.z,
      ... )
      >>> actuator = TorqueActuator.at_pin_joint(torque, pin_joint)
  
      The forces produces by the damper can be generated by calling the
      ``to_loads`` method.
  
      >>> actuator.to_loads()
      [(A, T*N.z), (N, - T*N.z)]
  
      Alternatively, if a torque actuator is created without a reaction frame
      then the loads returned by the ``to_loads`` method will contain just
      the single load acting on the target frame.
  
      >>> actuator = TorqueActuator(torque, N.z, N)
      >>> actuator.to_loads()
      [(N, T*N.z)]
  
      """
      loads = [
          Torque(self.target_frame, self.torque * self.axis),
      ]
      if self.reaction_frame is not None:
          loads.append(
              Torque(self.reaction_frame, -self.torque * self.axis)
          )
      return loads
  
imports: from abc import ABC, abstractmethod
  from sympy import S, sympify
  from sympy.physics.mechanics.joint import PinJoint
  from sympy.physics.mechanics.loads import Torque
  from sympy.physics.mechanics.pathway import PathwayBase
  from sympy.physics.mechanics.rigidbody import RigidBody
  from sympy.physics.vector import ReferenceFrame, Vector
label_desc: Use image node_id 11 for calling the TorqueActuator obj's underlying member method code with example usage: obj.to_loads() and returns: loads