class_docstr: Obstacle-set pathway between a set of attachment points.
  
  Explanation
  ===========
  
  An obstacle-set pathway forms a series of straight-line segment between
  pairs of consecutive points in a set of points. It is similiar to multiple
  linear pathways joined end-to-end. It will not interact with any other
  objects in the system, i.e. an ``ObstacleSetPathway`` will intersect other
  objects to ensure that the path between its pairs of points (its
  attachments) is the shortest possible.
  
  Examples
  ========
  
  To construct an obstacle-set pathway, three or more points are required to
  be passed to the ``attachments`` parameter as a ``tuple``.
  
  >>> from sympy.physics.mechanics import ObstacleSetPathway, Point
  >>> pA, pB, pC, pD = Point('pA'), Point('pB'), Point('pC'), Point('pD')
  >>> obstacle_set_pathway = ObstacleSetPathway(pA, pB, pC, pD)
  >>> obstacle_set_pathway
  ObstacleSetPathway(pA, pB, pC, pD)
  
  The pathway created above isn't very interesting without the positions and
  velocities of its attachment points being described. Without this its not
  possible to describe how the pathway moves, i.e. its length or its
  extension velocity.
  
  >>> from sympy import cos, sin
  >>> from sympy.physics.mechanics import ReferenceFrame
  >>> from sympy.physics.vector import dynamicsymbols
  >>> N = ReferenceFrame('N')
  >>> q = dynamicsymbols('q')
  >>> pO = Point('pO')
  >>> pA.set_pos(pO, N.y)
  >>> pB.set_pos(pO, -N.x)
  >>> pC.set_pos(pA, cos(q) * N.x - (sin(q) + 1) * N.y)
  >>> pD.set_pos(pA, sin(q) * N.x + (cos(q) - 1) * N.y)
  >>> pB.pos_from(pA)
  - N.x - N.y
  >>> pC.pos_from(pA)
  cos(q(t))*N.x + (-sin(q(t)) - 1)*N.y
  >>> pD.pos_from(pA)
  sin(q(t))*N.x + (cos(q(t)) - 1)*N.y
  
  A pathway's length can be accessed via its ``length`` attribute.
  
  >>> obstacle_set_pathway.length.simplify()
  sqrt(2)*(sqrt(cos(q(t)) + 1) + 2)
  
  A pathway's extension velocity can be accessed similarly via its
  ``extension_velocity`` attribute.
  
  >>> obstacle_set_pathway.extension_velocity.simplify()
  -sqrt(2)*sin(q(t))*Derivative(q(t), t)/(2*sqrt(cos(q(t)) + 1))
  
  Parameters
  ==========
  
  attachments : tuple[Point, Point]
      The set of ``Point`` objects that define the segmented obstacle-set
      pathway.
class_docstr_tok: ["Obstacle-set","pathway","between","a","set","of","attachment","points",".","Explanation","===========","An","obstacle-set","pathway","forms","a","series","of","straight-line","segment","between","pairs","of","consecutive","points","in","a","set","of","points",".","It","is","similiar","to","multiple","linear","pathways","joined","end-to-end",".","It","will","not","interact","with","any","other","objects","in","the","system",",","i.e",".","an","``","ObstacleSetPathway","``","will","intersect","other","objects","to","ensure","that","the","path","between","its","pairs","of","points","(","its","attachments",")","is","the","shortest","possible",".","Examples","========","To","construct","an","obstacle-set","pathway",",","three","or","more","points","are","required","to","be","passed","to","the","``","attachments","``","parameter","as","a","``","tuple","``",".",">",">",">","from","sympy.physics.mechanics","import","ObstacleSetPathway",",","Point",">",">",">","pA",",","pB",",","pC",",","pD","=","Point","(","'pA","'",")",",","Point","(","'pB","'",")",",","Point","(","'pC","'",")",",","Point","(","'pD","'",")",">",">",">","obstacle_set_pathway","=","ObstacleSetPathway","(","pA",",","pB",",","pC",",","pD",")",">",">",">","obstacle_set_pathway","ObstacleSetPathway","(","pA",",","pB",",","pC",",","pD",")","The","pathway","created","above","is","n't","very","interesting","without","the","positions","and","velocities","of","its","attachment","points","being","described",".","Without","this","its","not","possible","to","describe","how","the","pathway","moves",",","i.e",".","its","length","or","its","extension","velocity",".",">",">",">","from","sympy","import","cos",",","sin",">",">",">","from","sympy.physics.mechanics","import","ReferenceFrame",">",">",">","from","sympy.physics.vector","import","dynamicsymbols",">",">",">","N","=","ReferenceFrame","(","'N","'",")",">",">",">","q","=","dynamicsymbols","(","'","q","'",")",">",">",">","pO","=","Point","(","'pO","'",")",">",">",">","pA.set_pos","(","pO",",","N.y",")",">",">",">","pB.set_pos","(","pO",",","-N.x",")",">",">",">","pC.set_pos","(","pA",",","cos","(","q",")","*","N.x","-","(","sin","(","q",")","+","1",")","*","N.y",")",">",">",">","pD.set_pos","(","pA",",","sin","(","q",")","*","N.x","+","(","cos","(","q",")","-","1",")","*","N.y",")",">",">",">","pB.pos_from","(","pA",")","-","N.x","-","N.y",">",">",">","pC.pos_from","(","pA",")","cos","(","q","(","t",")",")","*","N.x","+","(","-sin","(","q","(","t",")",")","-","1",")","*","N.y",">",">",">","pD.pos_from","(","pA",")","sin","(","q","(","t",")",")","*","N.x","+","(","cos","(","q","(","t",")",")","-","1",")","*","N.y","A","pathway","'s","length","can","be","accessed","via","its","``","length","``","attribute",".",">",">",">","obstacle_set_pathway.length.simplify","(",")","sqrt","(","2",")","*","(","sqrt","(","cos","(","q","(","t",")",")","+","1",")","+","2",")","A","pathway","'s","extension","velocity","can","be","accessed","similarly","via","its","``","extension_velocity","``","attribute",".",">",">",">","obstacle_set_pathway.extension_velocity.simplify","(",")","-sqrt","(","2",")","*","sin","(","q","(","t",")",")","*","Derivative","(","q","(","t",")",",","t",")","\/","(","2","*","sqrt","(","cos","(","q","(","t",")",")","+","1",")",")","Parameters","==========","attachments",":","tuple","[","Point",",","Point","]","The","set","of","``","Point","``","objects","that","define","the","segmented","obstacle-set","pathway","."]
docstr: The set of points defining a pathway's segmented path.
docstr_tok: ["The","set","of","points","defining","a","pathway","'s","segmented","path","."]
code: def attachments(self):
      """The set of points defining a pathway's segmented path."""
      return self._attachments
  
imports: from abc import ABC, abstractmethod
  from sympy.core.singleton import S
  from sympy.physics.mechanics.loads import Force
  from sympy.physics.mechanics.wrapping_geometry import WrappingGeometryBase
  from sympy.physics.vector import Point, dynamicsymbols
label_desc: Use image node_id 2 for calling the ObstacleSetPathway obj's underlying member method code with example usage: obj.attachments() and returns: self