class_docstr: Matplotlib-specific abstract edge drawer object.
docstr: Draws an undirected edge.
  
  The default implementation of this method draws undirected edges
  as straight lines. Loop edges are drawn as small circles.
  
  @param edge: the edge to be drawn. Visual properties of the edge
    are defined by the attributes of this object.
  @param src_vertex: the source vertex. Visual properties are given
    again as attributes.
  @param dest_vertex: the target vertex. Visual properties are given
    again as attributes.
code: def draw_undirected_edge(self, edge, src_vertex, dest_vertex):
      """Draws an undirected edge.
  
      The default implementation of this method draws undirected edges
      as straight lines. Loop edges are drawn as small circles.
  
      @param edge: the edge to be drawn. Visual properties of the edge
        are defined by the attributes of this object.
      @param src_vertex: the source vertex. Visual properties are given
        again as attributes.
      @param dest_vertex: the target vertex. Visual properties are given
        again as attributes.
      """
      if src_vertex == dest_vertex:
          return self.draw_loop_edge(edge, src_vertex)
  
      fig = self.context
  
      path = [format_path_step("M", src_vertex.position)]
  
      if edge.curved:
          (x1, y1), (x2, y2) = src_vertex.position, dest_vertex.position
          aux1, aux2 = get_bezier_control_points_for_curved_edge(
              x1, y1, x2, y2, edge.curved
          )
  
          path.append(
              format_path_step(
                  "C",
                  [aux1, aux2, dest_vertex.position],
              )
          )
  
      else:
          path.append(
              format_path_step(
                  "L",
                  dest_vertex.position,
              )
          )
  
      path = " ".join(path)
  
      stroke = {
          "type": "path",
          "path": path,
          "line_color": format_rgba(edge.color),
          "line_width": edge.width,
      }
      fig.add_shape(stroke, layer="below")
  
file_path: python-igraph/src/igraph/drawing/plotly/edge.py
imports: from math import atan2, cos, pi, sin
  from igraph.drawing.baseclasses import AbstractEdgeDrawer
  from igraph.drawing.metamagic import AttributeCollectorBase
  from igraph.drawing.plotly.utils import find_plotly, format_path_step, format_arc, format_rgba
  from igraph.drawing.utils import Point, euclidean_distance, get_bezier_control_points_for_curved_edge, intersect_bezier_curve_and_circle
label_desc: Use image node_id 5 for calling the PlotlyEdgeDrawer obj's underlying member method code with example usage: obj.draw_undirected_edge(edge, src_vertex, dest_vertex) and returns: self