Context Managers for LibGAP¶
This module implements a context manager for global variables. This is useful since the behavior of GAP is sometimes controlled by global variables, which you might want to switch to a different value for a computation. Here is an example how you are suppose to use it from your code. First, let us set a dummy global variable for our example:
sage: libgap.set_global('FooBar', 123)
>>> from sage.all import *
>>> libgap.set_global('FooBar', Integer(123))
Then, if you want to switch the value momentarily you can write:
sage: with libgap.global_context('FooBar', 'test'):
....: print(libgap.get_global('FooBar'))
test
>>> from sage.all import *
>>> with libgap.global_context('FooBar', 'test'):
... print(libgap.get_global('FooBar'))
test
Afterward, the global variable reverts to the previous value:
sage: print(libgap.get_global('FooBar'))
123
>>> from sage.all import *
>>> print(libgap.get_global('FooBar'))
123
The value is reset even if exceptions occur:
sage: with libgap.global_context('FooBar', 'test'):
....: print(libgap.get_global('FooBar'))
....: raise ValueError(libgap.get_global('FooBar'))
Traceback (most recent call last):
...
ValueError: test
sage: print(libgap.get_global('FooBar'))
123
>>> from sage.all import *
>>> with libgap.global_context('FooBar', 'test'):
... print(libgap.get_global('FooBar'))
... raise ValueError(libgap.get_global('FooBar'))
Traceback (most recent call last):
...
ValueError: test
>>> print(libgap.get_global('FooBar'))
123
- class sage.libs.gap.context_managers.GlobalVariableContext(variable, value)[source]¶
Bases:
object
Context manager for GAP global variables.
It is recommended that you use the
sage.libs.gap.libgap.Gap.global_context()
method and not construct objects of this class manually.INPUT:
variable
– string; the variable namevalue
– anything that defines a GAP object
EXAMPLES:
sage: libgap.set_global('FooBar', 1) sage: with libgap.global_context('FooBar', 2): ....: print(libgap.get_global('FooBar')) 2 sage: libgap.get_global('FooBar') 1
>>> from sage.all import * >>> libgap.set_global('FooBar', Integer(1)) >>> with libgap.global_context('FooBar', Integer(2)): ... print(libgap.get_global('FooBar')) 2 >>> libgap.get_global('FooBar') 1