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: Alternate construtor to instantiate from a ``PinJoint`` instance.
  
  Examples
  ========
  
  To create a pin joint the ``PinJoint`` class requires a name, parent
  body, and child body to be passed to its constructor. It is also
  possible to control the joint axis using the ``joint_axis`` keyword
  argument. In this example let's use the parent body's reference frame's
  z-axis as the joint axis.
  
  >>> from sympy.physics.mechanics import (PinJoint, ReferenceFrame,
  ...     RigidBody, TorqueActuator)
  >>> 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,
  ... )
  
  Let's also create a symbol ``T`` that will represent the torque applied
  by the torque actuator.
  
  >>> from sympy import symbols
  >>> torque = symbols('T')
  
  To create the torque actuator from the ``torque`` and ``pin_joint``
  variables previously instantiated, these can be passed to the alternate
  constructor class method ``at_pin_joint`` of the ``TorqueActuator``
  class. It should be noted that a positive torque will cause a positive
  displacement of the joint coordinate or that the torque is applied on
  the child body with a reaction torque on the parent.
  
  >>> actuator = TorqueActuator.at_pin_joint(torque, pin_joint)
  >>> actuator
  TorqueActuator(T, axis=N.z, target_frame=A, reaction_frame=N)
  
  Parameters
  ==========
  
  torque : Expr
      The scalar expression defining the torque that the actuator
      produces.
  pin_joint : PinJoint
      The pin joint, and by association the parent and child bodies, on
      which the torque actuator will act. The pair of bodies acted upon
      by the torque actuator are the parent and child bodies of the pin
      joint, with the child acting as the reaction body. The pin joint's
      axis is used as the axis about which the torque actuator will apply
      its torque.
docstr_tok: ["Alternate","construtor","to","instantiate","from","a","``","PinJoint","``","instance",".","Examples","========","To","create","a","pin","joint","the","``","PinJoint","``","class","requires","a","name",",","parent","body",",","and","child","body","to","be","passed","to","its","constructor",".","It","is","also","possible","to","control","the","joint","axis","using","the","``","joint_axis","``","keyword","argument",".","In","this","example","let","'s","use","the","parent","body","'s","reference","frame's","z-axis","as","the","joint","axis",".",">",">",">","from","sympy.physics.mechanics","import","(","PinJoint",",","ReferenceFrame",",","...","RigidBody",",","TorqueActuator",")",">",">",">","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",",","...",")","Let","'s","also","create","a","symbol","``","T","``","that","will","represent","the","torque","applied","by","the","torque","actuator",".",">",">",">","from","sympy","import","symbols",">",">",">","torque","=","symbols","(","'T","'",")","To","create","the","torque","actuator","from","the","``","torque","``","and","``","pin_joint","``","variables","previously","instantiated",",","these","can","be","passed","to","the","alternate","constructor","class","method","``","at_pin_joint","``","of","the","``","TorqueActuator","``","class",".","It","should","be","noted","that","a","positive","torque","will","cause","a","positive","displacement","of","the","joint","coordinate","or","that","the","torque","is","applied","on","the","child","body","with","a","reaction","torque","on","the","parent",".",">",">",">","actuator","=","TorqueActuator.at_pin_joint","(","torque",",","pin_joint",")",">",">",">","actuator","TorqueActuator","(","T",",","axis=N.z",",","target_frame=A",",","reaction_frame=N",")","Parameters","==========","torque",":","Expr","The","scalar","expression","defining","the","torque","that","the","actuator","produces",".","pin_joint",":","PinJoint","The","pin","joint",",","and","by","association","the","parent","and","child","bodies",",","on","which","the","torque","actuator","will","act",".","The","pair","of","bodies","acted","upon","by","the","torque","actuator","are","the","parent","and","child","bodies","of","the","pin","joint",",","with","the","child","acting","as","the","reaction","body",".","The","pin","joint's","axis","is","used","as","the","axis","about","which","the","torque","actuator","will","apply","its","torque","."]
code: def at_pin_joint(cls, torque, pin_joint):
      """Alternate construtor to instantiate from a ``PinJoint`` instance.
  
      Examples
      ========
  
      To create a pin joint the ``PinJoint`` class requires a name, parent
      body, and child body to be passed to its constructor. It is also
      possible to control the joint axis using the ``joint_axis`` keyword
      argument. In this example let's use the parent body's reference frame's
      z-axis as the joint axis.
  
      >>> from sympy.physics.mechanics import (PinJoint, ReferenceFrame,
      ...     RigidBody, TorqueActuator)
      >>> 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,
      ... )
  
      Let's also create a symbol ``T`` that will represent the torque applied
      by the torque actuator.
  
      >>> from sympy import symbols
      >>> torque = symbols('T')
  
      To create the torque actuator from the ``torque`` and ``pin_joint``
      variables previously instantiated, these can be passed to the alternate
      constructor class method ``at_pin_joint`` of the ``TorqueActuator``
      class. It should be noted that a positive torque will cause a positive
      displacement of the joint coordinate or that the torque is applied on
      the child body with a reaction torque on the parent.
  
      >>> actuator = TorqueActuator.at_pin_joint(torque, pin_joint)
      >>> actuator
      TorqueActuator(T, axis=N.z, target_frame=A, reaction_frame=N)
  
      Parameters
      ==========
  
      torque : Expr
          The scalar expression defining the torque that the actuator
          produces.
      pin_joint : PinJoint
          The pin joint, and by association the parent and child bodies, on
          which the torque actuator will act. The pair of bodies acted upon
          by the torque actuator are the parent and child bodies of the pin
          joint, with the child acting as the reaction body. The pin joint's
          axis is used as the axis about which the torque actuator will apply
          its torque.
  
      """
      if not isinstance(pin_joint, PinJoint):
          msg = (
              f"Value {repr(pin_joint)} passed to `pin_joint` was of type "
              f"{type(pin_joint)}, must be {PinJoint}."
          )
          raise TypeError(msg)
      return cls(
          torque,
          pin_joint.joint_axis,
          pin_joint.child_interframe,
          pin_joint.parent_interframe,
      )
  
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 2 for calling the TorqueActuator obj's underlying member method code with example usage: obj.at_pin_joint(cls, torque, pin_joint) and returns: cls