<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def decompose_curve(obj, **kwargs):
 """ 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 """

    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