'Add more x values to the set to be interpolated
The barycentric interpolation algorithm allows easy updating by
adding more points for the polynomial to pass through.
Parameters
xi : array_like
The x coordinates of the points that the polynomial should pass
through.
yi : array_like, optional
The y coordinates of the points the polynomial should pass through.
Should have shape ``(xi.size, R)``; if R > 1 then the polynomial is
vector-valued.
If `yi` is not given, the y values will be supplied later. `yi` should
be given if and only if the interpolator has y values specified.'

def add_xi(self, xi, yi=None):

    if (yi is not None):
        if (self.yi is None):
            raise ValueError('No    previous    yi    value    to    update!')
        yi = self._reshape_yi(yi, check=True)
        self.yi = np.vstack((self.yi, yi))
    elif (self.yi is not None):
        raise ValueError('No    update    to    yi    provided!')
    old_n = self.n
    self.xi = np.concatenate((self.xi, xi))
    self.n = len(self.xi)
    self.wi **= (-1)
    old_wi = self.wi
    self.wi = np.zeros(self.n)
    self.wi[:old_n] = old_wi
    for j in xrange(old_n, self.n):
        self.wi[:j] *= (self.xi[j] - self.xi[:j])
        self.wi[j] = np.multiply.reduce((self.xi[:j] - self.xi[j]))
    self.wi **= (-1)
