Clarifications

Here are some numerical clarifications of the algorithm definitions and behaviors.

0-order B-Spline Interpolations are not the same as Constant Interpolations

using DataInterpolations, Plots
using DataInterpolations: derivative
u = [2.0, 1.0, 5.0, 4.0, 5.0, 4.0]
t = [0.0, 2.0, 3.5, 4.0, 5.0, 6.5]
bspline = BSplineInterpolation(u, t, 0, :Uniform, :Uniform; extrapolation_left=ExtrapolationType.Extension,  extrapolation_right=ExtrapolationType.Extension)
plot(bspline)
Example block output

A B-spline curve is constructed using control coefficients, hence, the jump locations are at knot vectors and do not coincide with data points(which is the case for constant-interpolation). Thus, the plot for B-Spline interpolation does not appear the same as the plot for Constant Interpolation.

Derivative behavior of quadratic B-Spline

bspline = BSplineInterpolation(u, t, 2, :Uniform, :Uniform; extrapolation_left=ExtrapolationType.Extension,  extrapolation_right=ExtrapolationType.Extension)
plot(t->derivative(bspline, t))
Example block output

The derivative becomes piecewise linear with jumps, and extrapolation can introduce sharp artifacts near boundaries, additionally derivative(bspline, t) is calculated by differentiating the spline basis and evaluating outside nominal knot spans using extension, not clamping. Hence, sudden spikes near the ends and sharp negative excursions where basis support ends.