The Qt4 inputhook now execs until the stdin is readable, instead of waiting for a timeout to happen. This approach was supposed to play better with readline which repeatedly calls the inputhook every 100ms. But actually it does not. Same timings as before, roughly twice the time it takes when there's no %gui. The timing for the original native PyQt4 hook was somewhere in the middle (35ms - 58ms - 72ms).
This prevents the tooltip from going below the bottom of the page, which makes it inaccessible by any mechanism and thus useless.
The meshgrid used for plotting was completely wrong Use regular x,y plot instead, and add figure() calls, so that it isn't broken everywhere but the notebook with inline backend and default config. figures in parallel docs are regenerated with the changes
small adjustments to log formatting, and add new info-level message indicating full path of json files being written/read.
Put warning in code not to remove an action needed when ssh -X. "All magics..." menu should be autopopulated at startup, but is not when X forwarding, Warn in code that inserting 'update all magic menu' action in this same menu is not as useless as it may seem
Fix bug in pylab support introduced in #648, and refactor the pylab/gui support to eliminate a lot of code duplication we had in a number of places. Now all duplicate code is gone, and the only real difference is how gui event loops are integrated, which is reduced to a single static method that each relevant class grabs from its specific machinery.
This avoids a circular import problem, and also organizes more cleanly the code that is event-loop specific.
Also, fix a few tests that the previous commit broke.
code used it as a dict. Updated that code to handle a dict correctly, and added tests to catch this issue in the future (also increases test coverage of pylab code).
Clean up handling of global namespaces with the proper semantics. A global namespace should always be tied to a module: pickle accesses classes via the module in which they're defined. So I've changed the arguments for instantiating an InteractiveShell to include `user_module` in place of `user_global_ns`. The global namespace simply becomes a reference to `user_module.__dict__`. For instantiating InteractiveShell, there are four possibilities: * Neither `user_ns` nor `user_module` is given. A new (real) module is created named `__main__`, and its `__dict__` becomes the global and local namespace. This is what happens when starting IPython normally. * Only `user_module` is given. Its `__dict__` becomes the global and local namespace. * Both `user_ns` and `user_module` are given. `user_module.__dict__` is the global namespace, and `user_ns` is the local namespace. Note that we can't interactively define closures over variables in the local namespace (this seems to be a limitation of Python). * Only `user_ns` is given. It is treated as the global and local namespace, and a `DummyMod` object is created to refer to it. This is intended as a convenience, especially for the test suite. The recommended way to pass in a single global namespace is as a reference to the module. `embed()` digs out the locals and the module from the frame in which it's called. Closes gh-29, closes gh-693.
Improvements to pexpect to work correctly with Python 3. This brings in a more complete port of pexpect that I've been working on recently, called (for now) [pexpect-u]( http://pypi.python.org/pypi/pexpect-u/). It's compatible with Python 2.6 and up, including 2to3 conversion to Python 3. I've contacted the author of pexpect about working these changes back in. But this could take a while - pexpect has previously supported very old versions of Python (the docs claim it's been tested on Python 1.5), so I'll have to see how much compromise is possible.