A Sage extension which adds sage-specific features:
TESTS:
We test that preparsing is off for %runfile, on for %time:
sage: import os, re
sage: from sage.repl.interpreter import get_test_shell
sage: from sage.misc.misc import tmp_dir
sage: shell = get_test_shell()
sage: TMP = tmp_dir()
The temporary directory should have a name of the form .../12345/..., to demonstrate that file names are not preparsed when calling %runfile
sage: bool(re.search('/[0-9]+/', TMP))
True
sage: tmp = os.path.join(TMP, 'run_cell.py')
sage: f = open(tmp, 'w'); f.write('a = 2\n'); f.close()
sage: shell.run_cell('%runfile '+tmp)
sage: shell.run_cell('a')
2
In contrast, input to the %time magic command is preparsed:
sage: shell.run_cell('%time 594.factor()')
CPU times: user ...
Wall time: ...
2 * 3^3 * 11
Bases: object
Initialize the Sage plugin.
Set up Sage command-line environment
x.__init__(...) initializes x; see help(type(x)) for signature
Set up transforms (like the preparser).
Register magics for each of the Sage interfaces
Run Sage’s initial startup file.
Set the exit hook to cleanly exit Sage.
Bases: IPython.core.magic.Magics
Attach the code contained in the file s.
This is designed to be used from the command line as %attach /path/to/file.
EXAMPLES:
sage: import os
sage: from sage.repl.interpreter import get_test_shell
sage: shell = get_test_shell()
sage: tmp = os.path.normpath(os.path.join(SAGE_TMP, 'run_cell.py'))
sage: f = open(tmp, 'w'); f.write('a = 2\n'); f.close()
sage: shell.run_cell('%attach ' + tmp)
sage: shell.run_cell('a')
2
sage: sleep(1) # filesystem timestamp granularity
sage: f = open(tmp, 'w'); f.write('a = 3\n'); f.close()
Note that the doctests are never really at the command prompt, so we call the input hook manually:
sage: shell.run_cell('from sage.repl.inputhook import sage_inputhook')
sage: shell.run_cell('sage_inputhook()')
### reloading attached file run_cell.py modified at ... ###
0
sage: shell.run_cell('a')
3
sage: shell.run_cell('detach(%r)'%tmp)
sage: shell.run_cell('attached_files()')
[]
sage: os.remove(tmp)
Profile C function calls
INPUT:
EXAMPLES:
sage: from sage.repl.interpreter import get_test_shell
sage: shell = get_test_shell()
sage: shell.run_cell('%crun sum(1/(1+n^2) for n in range(100))') # optional - gperftools
PROFILE: interrupts/evictions/bytes = ...
Using local file ...
Using local file ...
A magic command to switch between simple display and ASCII art display.
How to use: if you want activate the ASCII art mod:
sage: from sage.repl.interpreter import get_test_shell
sage: shell = get_test_shell()
sage: shell.run_cell('%display ascii_art')
That means you don’t have to use ascii_art() to get an ASCII art output:
sage: shell.run_cell("i = var('i')")
sage: shell.run_cell('sum(i^2*x^i, i, 0, 10)')
10 9 8 7 6 5 4 3 2
100*x + 81*x + 64*x + 49*x + 36*x + 25*x + 16*x + 9*x + 4*x + x
Then when you want return in ‘textual mode’:
sage: shell.run_cell('%display simple')
sage: shell.run_cell('sum(i^2*x^i, i, 0, 10)')
100*x^10 + 81*x^9 + 64*x^8 + 49*x^7 + 36*x^6 + 25*x^5 + 16*x^4 + 9*x^3 + 4*x^2 + x
Sometime you could have to use a special output width and you could specify it:
sage: shell.run_cell('%display ascii_art')
sage: shell.run_cell('StandardTableaux(4).list()')
[
[ 1 4 1 3
[ 1 3 4 1 2 4 1 2 3 1 3 1 2 2 2
[ 1 2 3 4, 2 , 3 , 4 , 2 4, 3 4, 3 , 4
1 ]
1 2 2 ]
3 3 ]
, 4 , 4 ]
sage: shell.run_cell('%display ascii_art 50')
sage: shell.run_cell('StandardTableaux(4).list()')
[
[
[ 1 3 4 1 2 4 1 2 3
[ 1 2 3 4, 2 , 3 , 4 ,
1 ]
1 4 1 3 1 2 2 ]
1 3 1 2 2 2 3 3 ]
2 4, 3 4, 3 , 4 , 4 , 4 ]
As yet another option, typeset mode. This is used in the emacs interface:
sage: shell.run_cell('%display typeset')
sage: shell.run_cell('1/2')
<html><script type="math/tex">...\frac{1}{2}</script></html>
Switch back:
sage: shell.run_cell('%display simple')
TESTS:
sage: shell.run_cell('%display invalid_mode')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
...
ValueError: invalid mode set
A magic command to interactively load a file as in MAGMA.
Note
Currently, this cannot be completely doctested as it relies on raw_input().
EXAMPLES:
sage: ip = get_ipython() # not tested: works only in interactive shell
sage: ip.magic_iload('/dev/null') # not tested: works only in interactive shell
Interactively loading "/dev/null" # not tested: works only in interactive shell
Execute the code contained in the file s.
This is designed to be used from the command line as %runfile /path/to/file.
EXAMPLES:
sage: import os
sage: from sage.repl.interpreter import get_test_shell
sage: from sage.misc.misc import tmp_dir
sage: shell = get_test_shell()
sage: tmp = os.path.join(tmp_dir(), 'run_cell.py')
sage: f = open(tmp, 'w'); f.write('a = 2\n'); f.close()
sage: shell.run_cell('%runfile '+tmp)
sage: shell.run_cell('a')
2
Load the extension in IPython.
Runs a function (successfully) only once.
The running can be reset by setting the has_run attribute to False
TEST:
sage: from sage.repl.ipython_extension import run_once
sage: @run_once
....: def foo(work):
....: if work:
....: return 'foo worked'
....: raise RuntimeError("foo didn't work")
sage: foo(False)
Traceback (most recent call last):
...
RuntimeError: foo didn't work
sage: foo(True)
'foo worked'
sage: foo(False)
sage: foo(True)