def test_division():
    b = LagrangeBasis(range(10))
    p1 = b.X**2
    p2 = b.X**2-1
    q, r = divmod(p1,p2)
    assert equal_by_values(q,b.one)
    assert equal_by_values(r,b.one)
def check_coefficient_addition(b, l1, l2):
    p1 = Polynomial(l1,b)
    p2 = Polynomial(l2,b)
    n = max(len(l1),len(l2))
    c = np.zeros(n)
    c[:len(l1)] += l1
    c[:len(l2)] += l2
    p = Polynomial(c,b)
    assert equal_by_values(p1+p2, p)
def test_power():
    b = LagrangeBasis()
    p = Polynomial([0,1],b)
    for i in range(16):
        assert equal_by_values(p**i, reduce(lambda x, y: x*y, [p]*i, b.one))
def test_interpolating():
    xs = np.linspace(-1,1,5)
    p1 = Polynomial([1,2,3,1],LagrangeBasis())
    p2 = Polynomial(p1(xs),LagrangeBasis(xs))
    assert equal_by_values(p1,p2)
def check_product_rule(p1, p2):
    assert equal_by_values((p1*p2).derivative(),
            p1*p2.derivative()+p1.derivative()*p2)
def check_derivative_linearity(p1, p2):
    f = 7.3
    assert equal_by_values((f*p1).derivative(),f*p1.derivative())
    assert equal_by_values((p1+p2).derivative(),p1.derivative()+p2.derivative())