pull upstream changes from IPython