class_docstr: Pathway that wraps a geometry object.
  
  Explanation
  ===========
  
  A wrapping pathway interacts with a geometry object and forms a path that
  wraps smoothly along its surface. The wrapping pathway along the geometry
  object will be the geodesic that the geometry object defines based on the
  two points. It will not interact with any other objects in the system, i.e.
  a ``WrappingPathway`` will intersect other objects to ensure that the path
  between its two ends (its attachments) is the shortest possible.
  
  To explain the sign conventions used for pathway length, extension
  velocity, and direction of applied forces, we can ignore the geometry with
  which the wrapping pathway interacts. A wrapping pathway is made up of two
  points that can move relative to each other, and a pair of equal and
  opposite forces acting on the points. If the positive time-varying
  Euclidean distance between the two points is defined, then the "extension
  velocity" is the time derivative of this distance. The extension velocity
  is positive when the two points are moving away from each other and
  negative when moving closer to each other. The direction for the force
  acting on either point is determined by constructing a unit vector directed
  from the other point to this point. This establishes a sign convention such
  that a positive force magnitude tends to push the points apart. The
  following diagram shows the positive force sense and the distance between
  the points::
  
     P           Q
     o<--- F --->o
     |           |
     |<--l(t)--->|
  
  Examples
  ========
  
  >>> from sympy.physics.mechanics import WrappingPathway
  
  To construct a wrapping pathway, like other pathways, a pair of points must
  be passed, followed by an instance of a wrapping geometry class as a
  keyword argument. We'll use a cylinder with radius ``r`` and its axis
  parallel to ``N.x`` passing through a point ``pO``.
  
  >>> from sympy import symbols
  >>> from sympy.physics.mechanics import Point, ReferenceFrame, WrappingCylinder
  >>> r = symbols('r')
  >>> N = ReferenceFrame('N')
  >>> pA, pB, pO = Point('pA'), Point('pB'), Point('pO')
  >>> cylinder = WrappingCylinder(r, pO, N.x)
  >>> wrapping_pathway = WrappingPathway(pA, pB, cylinder)
  >>> wrapping_pathway
  WrappingPathway(pA, pB, geometry=WrappingCylinder(radius=r, point=pO,
      axis=N.x))
  
  Parameters
  ==========
  
  attachment_1 : Point
      First of the pair of ``Point`` objects between which the wrapping
      pathway spans.
  attachment_2 : Point
      Second of the pair of ``Point`` objects between which the wrapping
      pathway spans.
  geometry : WrappingGeometryBase
      Geometry about which the pathway wraps.
class_docstr_tok: ["Pathway","that","wraps","a","geometry","object",".","Explanation","===========","A","wrapping","pathway","interacts","with","a","geometry","object","and","forms","a","path","that","wraps","smoothly","along","its","surface",".","The","wrapping","pathway","along","the","geometry","object","will","be","the","geodesic","that","the","geometry","object","defines","based","on","the","two","points",".","It","will","not","interact","with","any","other","objects","in","the","system",",","i.e",".","a","``","WrappingPathway","``","will","intersect","other","objects","to","ensure","that","the","path","between","its","two","ends","(","its","attachments",")","is","the","shortest","possible",".","To","explain","the","sign","conventions","used","for","pathway","length",",","extension","velocity",",","and","direction","of","applied","forces",",","we","can","ignore","the","geometry","with","which","the","wrapping","pathway","interacts",".","A","wrapping","pathway","is","made","up","of","two","points","that","can","move","relative","to","each","other",",","and","a","pair","of","equal","and","opposite","forces","acting","on","the","points",".","If","the","positive","time-varying","Euclidean","distance","between","the","two","points","is","defined",",","then","the","``","extension","velocity","''","is","the","time","derivative","of","this","distance",".","The","extension","velocity","is","positive","when","the","two","points","are","moving","away","from","each","other","and","negative","when","moving","closer","to","each","other",".","The","direction","for","the","force","acting","on","either","point","is","determined","by","constructing","a","unit","vector","directed","from","the","other","point","to","this","point",".","This","establishes","a","sign","convention","such","that","a","positive","force","magnitude","tends","to","push","the","points","apart",".","The","following","diagram","shows","the","positive","force","sense","and","the","distance","between","the","points",":",":","P","Q","o","<","--","-","F","--","-",">","o","|","|","|","<","--","l","(","t",")","--","-",">","|","Examples","========",">",">",">","from","sympy.physics.mechanics","import","WrappingPathway","To","construct","a","wrapping","pathway",",","like","other","pathways",",","a","pair","of","points","must","be","passed",",","followed","by","an","instance","of","a","wrapping","geometry","class","as","a","keyword","argument",".","We","'ll","use","a","cylinder","with","radius","``","r","``","and","its","axis","parallel","to","``","N.x","``","passing","through","a","point","``","pO","``",".",">",">",">","from","sympy","import","symbols",">",">",">","from","sympy.physics.mechanics","import","Point",",","ReferenceFrame",",","WrappingCylinder",">",">",">","r","=","symbols","(","'","r","'",")",">",">",">","N","=","ReferenceFrame","(","'N","'",")",">",">",">","pA",",","pB",",","pO","=","Point","(","'pA","'",")",",","Point","(","'pB","'",")",",","Point","(","'pO","'",")",">",">",">","cylinder","=","WrappingCylinder","(","r",",","pO",",","N.x",")",">",">",">","wrapping_pathway","=","WrappingPathway","(","pA",",","pB",",","cylinder",")",">",">",">","wrapping_pathway","WrappingPathway","(","pA",",","pB",",","geometry=WrappingCylinder","(","radius=r",",","point=pO",",","axis=N.x",")",")","Parameters","==========","attachment_1",":","Point","First","of","the","pair","of","``","Point","``","objects","between","which","the","wrapping","pathway","spans",".","attachment_2",":","Point","Second","of","the","pair","of","``","Point","``","objects","between","which","the","wrapping","pathway","spans",".","geometry",":","WrappingGeometryBase","Geometry","about","which","the","pathway","wraps","."]
code: def geometry(self, geometry):
      if hasattr(self, "_geometry"):
          msg = (
              f"Can't set attribute `geometry` to {repr(geometry)} as it "
              f"is immutable."
          )
          raise AttributeError(msg)
      if not isinstance(geometry, WrappingGeometryBase):
          msg = (
              f"Value {repr(geometry)} passed to `geometry` was of type "
              f"{type(geometry)}, must be {WrappingGeometryBase}."
          )
          raise TypeError(msg)
      self._geometry = geometry
  
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 3 for calling the WrappingPathway obj's underlying member method code with example usage: obj.geometry(geometry) without return types