code: def find_ctrlpts(obj, u, v=None, **kwargs):
      
      if isinstance(obj, abstract.Curve):
          return ops.find_ctrlpts_curve(u, obj, **kwargs)
      elif isinstance(obj, abstract.Surface):
          if v is None:
              raise GeomdlException("Parameter value for the v-direction must be set for operating on surfaces")
          return ops.find_ctrlpts_surface(u, v, obj, **kwargs)
      else:
          raise GeomdlException("The input must be an instance of abstract.Curve or abstract.Surface")
docs: Finds the control points involved in the evaluation of the curve/surface point defined by the input parameter(s).
  
      :param obj: curve or surface
      :type obj: abstract.Curve or abstract.Surface
      :param u: parameter (for curve), parameter on the u-direction (for surface)
      :type u: float
      :param v: parameter on the v-direction (for surface only)
      :type v: float
      :return: control points; 1-dimensional array for curve, 2-dimensional array for surface
      :rtype: list