code: def _make_alluvial_curve(
      verts, verts_out, weight, width, color, alpha
  ):
      """A single flow for a combination of values for all variables.
  
  
      Parameters
      ----------
      verts : list of tuples
          Vertex coordinates
      weight : float
          Height (strength) of flow.
      width : float
          Width of pillar for each variable.
      color : color
          Color of flow.
      alpha: float
          Transparency of flow.
      """
      path_points = []
      codes = []
      # vert is lower left hand corner of flow for each segment
      for i, vert in enumerate(verts):
          if i == 0:
              codes.append(Path.MOVETO)
              path_points.append(vert)
          else:
              last_point = path_points[-1]
              # first bezier handle
              codes.append(Path.CURVE4)
              path_points.append(
                  ((last_point[0] + vert[0]) / 2, last_point[1])
              )
              # second bezier handle
              codes.append(Path.CURVE4)
              path_points.append(
                  ((last_point[0] + vert[0]) / 2, vert[1])
              )
              # first point
              codes.append(Path.LINETO)
              # codes.append(Path.LINETO)
              path_points.append(vert)
          if i in [0, len(verts) - 1]:
              # we don't have a separate out-vert for the first or last one
              out_vert = vert
          else:
              out_vert = verts_out[i - 1]
          # second point in within block
          # first bezier handle
          out_vert = (out_vert[0] + width, out_vert[1])
          codes.append(Path.CURVE4)
          path_points.append(((out_vert[0] + vert[0]) / 2, vert[1]))
          # second bezier handle
          codes.append(Path.CURVE4)
          path_points.append(((out_vert[0] + vert[0]) / 2, out_vert[1]))
  
          codes.append(Path.LINETO)
          path_points.append((out_vert[0], out_vert[1]))
  
      # go back, shift up by weight
      path_points.extend(
          [(x, y + weight) for x, y in path_points[::-1]]
      )
      codes.extend(codes[::-1])
      codes[-1] = Path.LINETO
      # close poly
      path_points.append(path_points[-1])
      codes.append(Path.CLOSEPOLY)
      path = Path(path_points, codes)
      return patches.PathPatch(path, alpha=alpha, lw=0, color=color)
  
file_path: dabl/dabl/plot/sankey.py
imports: import matplotlib
  from collections import defaultdict
  import matplotlib.pyplot
  from matplotlib.path import Path
  import matplotlib.patches
  from itertools import cycle
  from sklearn.feature_selection import mutual_info_classif
  import numpy
  from copy import deepcopy
  from ..preprocessing import detect_types
  from .utils import _prune_categories
label_desc: Use image node_id 2 for calling a global function with example usage: _make_alluvial_curve(verts, verts_out, weight, width, color, alpha) and returns: patches