'Evaluate the BSpline at a given point, yielding
a matrix B and return
B * self.coef
INPUTS:
args -- optional arguments. If None, it returns self._basisx,
the BSpline evaluated at the x values passed in __init__.
Otherwise, return the BSpline evaluated at the
first argument args[0].
OUTPUTS: y
y    -- value of Bspline at specified x values
BUGS:
If self has no attribute x, an exception will be raised
because self has no attribute _basisx.'

def __call__(self, *args):

    if (not args):
        b = self._basisx.T
    else:
        x = args[0]
        b = np.asarray(self.basis(x)).T
    return np.squeeze(np.dot(b, self.coef))
