[IPython-dev] Sage customizations
Tue Sep 11 16:24:03 CDT 2012
Fernando recently posted that we should be able to do the Sage
customizations to ipython via just config changes and extensions. As
I'm getting deeper into what we do, I see the following obstacles.
Should we be able to do these changes from config changes and extensions?
* interactiveshell system_raw function: Sage messes with the
LD_LIBRARY_PATH so that programs included in Sage work correctly.
However, if we're calling out to a system program installed outside of
Sage, we need to reset the LD_LIBRARY_PATH. So right now we override
system_raw to set the correct LD_LIBRARY_PATH if we don't recognize the
command as a sage-provided command. What if we could have pre- and
post- system_raw hooks, where we could run these commands? I can
imagine that these would also be useful if you wanted to always set a
current directory for raw system commands, etc. I suppose the same
issue applies to the system_piped command.
* SageTerminalApp inherits from TerminalIPythonApp and overrides the
crash handler to print out custom text for reporting crashes to Sage.
Is there a way to get the app, given the shell? If there was, I could
override this as part of an extension, but I'm not sure if that's the
most elegant way to do things. Having a SageTerminalApp also lets us
set the name to be "Sage", and just seems more natural in some ways.
Here are several sticky points that seem like they should be easier (or
at least less controversial) to solve
* transformations are stateless (they only depend on a single line, and
shouldn't store state) --- what is the rationale behind this? For
example, we'd like to do a dedenting transformation (useful if we are
pasting lots of text, after we turn off autoindenting, or even if we are
pasting a lot of single commands with autoindenting). Of course, to do
a dedenting transformation, we need to know the indentation of the first
line, so it is not stateless. Looking at the IPython code, it would be
trivial to pass the line number in with the line string to transformations.
* oinspect -- we need to monkey-patch ipython to replace these functions:
IPython.core.oinspect.getdoc = sageinspect.sage_getdoc
IPython.core.oinspect.getsource = sagedoc.my_getsource
IPython.core.oinspect.getargspec = sageinspect.sage_getargspec
because these functions are explicitly imported and used in various
places in IPython. Rather, could IPython use, say, something tied to an
inspector object attached to the shell or something? Then we could just
set those attributes.
Comments are welcome! I'm willing to help with pull requests for any of
the items above that you guys are okay with changing.
More information about the IPython-dev