code: def normal_curve_single(obj, u, normalize):
      
      # 2nd derivative of the curve gives the normal
      ders = obj.derivatives(u, 2)
  
      point = ders[0]
      vector = linalg.vector_normalize(ders[2]) if normalize else ders[2]
  
      return tuple(point), tuple(vector)
docs: Evaluates the curve normal vector at the input parameter, u.
  
      Curve normal is calculated from the 2nd derivative of the curve at the input parameter, u.
      The output returns a list containing the starting point (i.e. origin) of the vector and the vector itself.
  
      :param obj: input curve
      :type obj: abstract.Curve
      :param u: parameter
      :type u: float
      :param normalize: if True, the returned vector is converted to a unit vector
      :type normalize: bool
      :return: a list containing "point" and "vector" pairs
      :rtype: tuple