code: def normalize(knot_vector, decimals=18):
      
      try:
          if knot_vector is None or len(knot_vector) == 0:
              raise ValueError("Input knot vector cannot be empty")
      except TypeError as e:
          print("An error occurred: {}".format(e.args[-1]))
          raise TypeError("Knot vector must be a list or tuple")
      except Exception:
          raise
  
      first_knot = float(knot_vector[0])
      last_knot = float(knot_vector[-1])
      denominator = last_knot - first_knot
  
      knot_vector_out = [float(("{:." + str(decimals) + "f}").format((float(kv) - first_knot) / denominator))
                         for kv in knot_vector]
  
      return knot_vector_out
docs: Normalizes the input knot vector to [0, 1] domain.
  
      :param knot_vector: knot vector to be normalized
      :type knot_vector: list, tuple
      :param decimals: rounding number
      :type decimals: int
      :return: normalized knot vector
      :rtype: list