code: def evaluate_cubic_bezier(x0, y0, x1, y1, x2, y2, x3, y3, t):
      """Evaluates the Bezier curve from point (x0,y0) to (x3,y3)
      via control points (x1,y1) and (x2,y2) at t. t is typically in the range
      [0; 1] such that 0 returns (x0, y0) and 1 returns (x3, y3).
      """
      xt = (
          (1.0 - t) ** 3 * x0
          + 3.0 * t * (1.0 - t) ** 2 * x1
          + 3.0 * t**2 * (1.0 - t) * x2
          + t**3 * x3
      )
      yt = (
          (1.0 - t) ** 3 * y0
          + 3.0 * t * (1.0 - t) ** 2 * y1
          + 3.0 * t**2 * (1.0 - t) * y2
          + t**3 * y3
      )
      return xt, yt
  
imports: from collections import defaultdict
  from math import atan2, cos, hypot, sin
  from typing import NamedTuple
  from igraph.utils import consecutive_pairs
label_desc: Use image node_id 3 for calling a global function with example usage: evaluate_cubic_bezier(x0, y0, x1, y1, x2, y2, x3, y3, t) and returns: xt,  yt