code: def decompose_curve(obj, **kwargs):
      
      if not isinstance(obj, abstract.Curve):
          raise GeomdlException("Input shape must be an instance of abstract.Curve class")
  
      multi_curve = []
      curve = copy.deepcopy(obj)
      knots = curve.knotvector[curve.degree + 1:-(curve.degree + 1)]
      while knots:
          knot = knots[0]
          curves = split_curve(curve, param=knot, **kwargs)
          multi_curve.append(curves[0])
          curve = curves[1]
          knots = curve.knotvector[curve.degree + 1:-(curve.degree + 1)]
      multi_curve.append(curve)
  
      return multi_curve
docs: Decomposes the curve into Bezier curve segments of the same degree.
  
      This operation does not modify the input curve, instead it returns the split curve segments.
  
      Keyword Arguments:
          * ``find_span_func``: FindSpan implementation. *Default:* :func:`.helpers.find_span_linear`
          * ``insert_knot_func``: knot insertion algorithm implementation. *Default:* :func:`.operations.insert_knot`
  
      :param obj: Curve to be decomposed
      :type obj: abstract.Curve
      :return: a list of Bezier segments
      :rtype: list