code: def nodes(self):
          
          return np.column_stack((self.points,
                                  self.points)).reshape(
                                      -1)[1:-1].reshape((-1, 2))
docs: Returns an (n,2) list of nodes, or vertices on the path.
          Note that this generic class function assumes that all of the
          reference points are on the path which is true for lines and
          three point arcs.
  
          If you were to define another class where that wasn't the case
          (for example, the control points of a bezier curve),
          you would need to implement an entity- specific version of this
          function.
  
          The purpose of having a list of nodes is so that they can then be
          added as edges to a graph so we can use functions to check
          connectivity, extract paths, etc.
  
          The slicing on this function is essentially just tiling points
          so the first and last vertices aren't repeated. Example:
  
          self.points = [0,1,2]
          returns:      [[0,1], [1,2]]