def test_issue_19262(): Delta = symbols('Delta', positive=True) knots = [i*Delta for i in range(4)] basis = bspline_basis_set(1, knots, x) y = symbols('y', nonnegative=True) basis2 = bspline_basis_set(1, knots, y) assert basis[0].subs(x, y) == basis2[0] assert interpolating_spline(1, x, [Delta*i for i in [1, 2, 4, 7]], [3, 6, 5, 7] ) == Piecewise((3*x/Delta, (Delta <= x) & (x <= 2*Delta)), (7 - x/(2*Delta), (x >= 2*Delta) & (x <= 4*Delta)), (Rational(7, 3) + 2*x/(3*Delta), (x >= 4*Delta) & (x <= 7*Delta)))
def test_basic_degree_0(): d = 0 knots = range(5) splines = bspline_basis_set(d, knots, x) for i in range(len(splines)): assert splines[i] == Piecewise((1, Interval(i, i + 1).contains(x)), (0, True))
def test_basic_degree_1(): d = 1 knots = range(5) splines = bspline_basis_set(d, knots, x) assert splines[0] == Piecewise((x,Interval(0,1,False,True)),(2-x,Interval(1,2)),(0,True)) assert splines[1] == Piecewise((-1+x,Interval(1,2,False,True)),(3-x,Interval(2,3)),(0,True)) assert splines[2] == Piecewise((-2+x,Interval(2,3,False,True)),(4-x,Interval(3,4)),(0,True))
def test_basic_degree_2(): d = 2 knots = range(5) splines = bspline_basis_set(d, knots, x) b0 = Piecewise((x**2/2,Interval(0,1,False,True)),(Rational('-3/2')+3*x-x**2,Interval(1,2,False,True)),(Rational(9,2)-3*x+x**2/2,Interval(2,3)),(0,True)) b1 = Piecewise((Rational(1,2)-x+x**2/2,Interval(1,2,False,True)),(Rational(-11,2)+5*x-x**2,Interval(2,3,False,True)),(8-4*x+x**2/2,Interval(3,4)),(0,True)) assert splines[0] == b0 assert splines[1] == b1
def test_repeated_degree_1(): d = 1 knots = [0,0,1,2,2,3,4,4] splines = bspline_basis_set(d, knots, x) assert splines[0] == Piecewise((1 - x, Interval(0,1)), (0, True)) assert splines[1] == Piecewise((x, Interval(0,1,False,True)), (2 - x, Interval(1,2)), (0, True)) assert splines[2] == Piecewise((-1 + x, Interval(1,2)), (0, True)) assert splines[3] == Piecewise((3 - x, Interval(2,3)), (0, True)) assert splines[4] == Piecewise((-2 + x, Interval(2,3,False,True)), (4 - x, Interval(3,4)), (0, True)) assert splines[5] == Piecewise((-3 + x, Interval(3,4)), (0, True))
def test_basic_degree_3(): d = 3 knots = range(5) splines = bspline_basis_set(d, knots, x) b0 = Piecewise( (x**3 / 6, Interval(0, 1).contains(x)), (Rational(2, 3) - 2 * x + 2 * x**2 - x**3 / 2, Interval( 1, 2).contains(x)), (Rational(-22, 3) + 10 * x - 4 * x**2 + x**3 / 2, Interval( 2, 3).contains(x)), (Rational(32, 3) - 8 * x + 2 * x**2 - x**3 / 6, Interval(3, 4).contains(x)), (0, True)) assert splines[0] == b0
def test_basic_degree_3(): d = 3 knots = range(5) splines = bspline_basis_set(d, knots, x) b0 = Piecewise( (x**3/6, Interval(0, 1).contains(x)), (Rational(2, 3) - 2*x + 2*x**2 - x**3/2, Interval(1, 2).contains(x)), (Rational(-22, 3) + 10*x - 4*x**2 + x**3/2, Interval(2, 3).contains(x)), (Rational(32, 3) - 8*x + 2*x**2 - x**3/6, Interval(3, 4).contains(x)), (0, True) ) assert splines[0] == b0
def test_basic_degree_2(): d = 2 knots = range(5) splines = bspline_basis_set(d, knots, x) b0 = Piecewise((x**2/2, Interval(0, 1).contains(x)), (Rational(-3, 2) + 3*x - x**2, Interval(1, 2).contains(x)), (Rational(9, 2) - 3*x + x**2/2, Interval(2, 3).contains(x)), (0, True)) b1 = Piecewise((S.Half - x + x**2/2, Interval(1, 2).contains(x)), (Rational(-11, 2) + 5*x - x**2, Interval(2, 3).contains(x)), (8 - 4*x + x**2/2, Interval(3, 4).contains(x)), (0, True)) assert splines[0] == b0 assert splines[1] == b1
def test_repeated_degree_2(): d = 2 knots = [0, 0, 1, 2, 2, 3, 4, 4] splines = bspline_basis_set(d, knots, x) assert splines[0] == Piecewise( ((-3 * x**2 / 2 + 2 * x), And(x <= 1, x >= 0)), (x**2 / 2 - 2 * x + 2, And(x <= 2, x >= 1)), (0, True)) assert splines[1] == Piecewise( (x**2 / 2, And(x <= 1, x >= 0)), (-3 * x**2 / 2 + 4 * x - 2, And(x <= 2, x >= 1)), (0, True)) assert splines[2] == Piecewise((x**2 - 2 * x + 1, And(x <= 2, x >= 1)), (x**2 - 6 * x + 9, And(x <= 3, x >= 2)), (0, True)) assert splines[3] == Piecewise( (-3 * x**2 / 2 + 8 * x - 10, And(x <= 3, x >= 2)), (x**2 / 2 - 4 * x + 8, And(x <= 4, x >= 3)), (0, True)) assert splines[4] == Piecewise( (x**2 / 2 - 2 * x + 2, And(x <= 3, x >= 2)), (-3 * x**2 / 2 + 10 * x - 16, And(x <= 4, x >= 3)), (0, True))
def test_repeated_degree_2(): d = 2 knots = [0, 0, 1, 2, 2, 3, 4, 4] splines = bspline_basis_set(d, knots, x) assert splines[0] == Piecewise(((-3*x**2/2 + 2*x), And(x <= 1, x >= 0)), (x**2/2 - 2*x + 2, And(x <= 2, x >= 1)), (0, True)) assert splines[1] == Piecewise((x**2/2, And(x <= 1, x >= 0)), (-3*x**2/2 + 4*x - 2, And(x <= 2, x >= 1)), (0, True)) assert splines[2] == Piecewise((x**2 - 2*x + 1, And(x <= 2, x >= 1)), (x**2 - 6*x + 9, And(x <= 3, x >= 2)), (0, True)) assert splines[3] == Piecewise((-3*x**2/2 + 8*x - 10, And(x <= 3, x >= 2)), (x**2/2 - 4*x + 8, And(x <= 4, x >= 3)), (0, True)) assert splines[4] == Piecewise((x**2/2 - 2*x + 2, And(x <= 3, x >= 2)), (-3*x**2/2 + 10*x - 16, And(x <= 4, x >= 3)), (0, True))