code: def add_dimension(obj, **kwargs):
      
      if not isinstance(obj, abstract.SplineGeometry):
          raise GeomdlException("Can only operate on spline geometry objects")
  
      # Keyword arguments
      inplace = kwargs.get('inplace', False)
      array_init = kwargs.get('array_init', [[] for _ in range(len(obj.ctrlpts))])
      offset_value = kwargs.get('offset', 0.0)
  
      # Update control points
      new_ctrlpts = array_init
      for idx, point in enumerate(obj.ctrlpts):
          temp = [float(p) for p in point[0:obj.dimension]]
          temp.append(offset_value)
          new_ctrlpts[idx] = temp
  
      if inplace:
          obj.ctrlpts = new_ctrlpts
          return obj
      else:
          ret = copy.deepcopy(obj)
          ret.ctrlpts = new_ctrlpts
          return ret
docs: Elevates the spatial dimension of the spline geometry.
  
      If you pass ``inplace=True`` keyword argument, the input will be updated. Otherwise, this function does not
      change the input but returns a new instance with the updated data.
  
      :param obj: spline geometry
      :type obj: abstract.SplineGeometry
      :return: updated spline geometry
      :rtype: abstract.SplineGeometry