This is an expect interface to another copy of the Sage interpreter.
Bases: sage.interfaces.expect.Expect
Expect interface to the Sage interpreter itself.
INPUT:
The version of Sage should be the same as on the local machine, since pickling is used to move data between the two Sage process.
EXAMPLES: We create an interface to a copy of Sage. This copy of Sage runs as an external process with its own memory space, etc.
sage: s = Sage()
Create the element 2 in our new copy of Sage, and cube it.
sage: a = s(2)
sage: a^3
8
Create a vector space of dimension , and compute its generators:
sage: V = s('QQ^4')
sage: V.gens()
((1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1))
Note that V is a not a vector space, it’s a wrapper around an object (which happens to be a vector space), in another running instance of Sage.
sage: type(V)
<class 'sage.interfaces.sage0.SageElement'>
sage: V.parent()
Sage
sage: g = V.0; g
(1, 0, 0, 0)
sage: g.parent()
Sage
We can still get the actual parent by using the name attribute of g, which is the variable name of the object in the child process.
sage: s('%s.parent()'%g.name())
Vector space of dimension 4 over Rational Field
Note that the memory space is completely different.
sage: x = 10
sage: s('x = 5')
5
sage: x
10
sage: s('x')
5
We can have the child interpreter itself make another child Sage process, so now three copies of Sage are running:
sage: s3 = s('Sage()')
sage: a = s3(10)
sage: a
10
This is in a subprocess of a subprocesses of your original Sage.
sage: _ = s.eval('%s.eval("x=8")'%s3.name())
sage: s3('"x"')
8
sage: s('x')
5
sage: x
10
The double quotes are needed because the call to s3 first evaluates its arguments using the s interpreter, so the call to s3 is passed s('"x"'), which is the string "x" in the s interpreter.
Clear the variable named var.
EXAMPLES:
sage: sage0.set('x', '2')
sage: sage0.get('x')
'2'
sage: sage0.clear('x')
sage: sage0.get('x')
"...NameError: name 'x' is not defined"
Spawn a new Sage command-line session.
EXAMPLES:
sage: sage0.console() #not tested
----------------------------------------------------------------------
| Sage Version ..., Release Date: ... |
| Type notebook() for the GUI, and license() for information. |
----------------------------------------------------------------------
...
Return cputime since this Sage subprocess was started.
EXAMPLES:
sage: sage0.cputime() # random output
1.3530439999999999
sage: sage0('factor(2^157-1)')
852133201 * 60726444167 * 1654058017289 * 2134387368610417
sage: sage0.cputime() # random output
1.6462939999999999
Send the code x to a second instance of the Sage interpreter and return the output as a string.
This allows you to run two completely independent copies of Sage at the same time in a unified way.
INPUT:
EXAMPLES:
sage: sage0.eval('2+2')
'4'
Get the value of the variable var.
EXAMPLES:
sage: sage0.set('x', '2')
sage: sage0.get('x')
'2'
EXAMPLES:
sage: sage0.new(2)
2
sage: _.parent()
Sage
Returns the preparsed version of the string s.
EXAMPLES:
sage: sage0.preparse('2+2')
'Integer(2)+Integer(2)'
EXAMPLES:
sage: s = Sage()
sage: s.eval('2+2')
'4'
sage: s.quit()
Set the variable var to the given value.
EXAMPLES:
sage: sage0.set('x', '2')
sage: sage0.get('x')
'2'
EXAMPLES:
sage: t = sage0.trait_names()
sage: len(t) > 100
True
sage: 'gcd' in t
True
EXAMPLES:
sage: sage0.version()
'Sage Version ..., Release Date: ...'
sage: sage0.version() == version()
True
EXAMPLES:
sage: from sage.interfaces.sage0 import reduce_load_Sage
sage: reduce_load_Sage()
Sage
EXAMPLES:
sage: from sage.interfaces.sage0 import reduce_load_element
sage: s = dumps(1/2)
sage: half = reduce_load_element(s); half
1/2
sage: half.parent()
Sage
Spawn a new Sage command-line session.
EXAMPLES:
sage: sage0_console() #not tested
----------------------------------------------------------------------
| Sage Version ..., Release Date: ... |
| Type notebook() for the GUI, and license() for information. |
----------------------------------------------------------------------
...
EXAMPLES:
sage: from sage.interfaces.sage0 import sage0_version
sage: sage0_version() == version()
True