| 1 | initial version |
I found a 'nice and clean' way to check if a variable is assumed to be integer.
The only objection to calling it 'nice and clean' is that it uses the hidden attribute_assumption, which does not exist as a method. This could be a feature request, and it would not be hard to implement.
In short, this checks if the variable 'a' is assumed to be integer:
sage: a = var('a')
sage: assume(a, 'integer')
sage: 'integer' in (x._assumption for x in assumptions(a))
True
(Tested in Sage Version 6.3.beta5, released on 2014-07-01, but I'm sure this has been possible for a long time.)
How could one find out about this? By exploring Sage using tab-completion and introspection.
sage: version() # for reference
'Sage Version 6.3.beta5, Release Date: 2014-07-01'
sage: a = var('a')
sage: assume(a, 'integer')
sage: h = assumptions()
sage: h
[a is integer]
sage: ha = assumptions(a)
sage: ha
[a is integer]
sage: d = assumptions(a)[0]
sage: d
a is integer
sage: type(d)
<class 'sage.symbolic.assumptions.GenericDeclaration'>
Now use the 'tab' key to check what methods are available for d:
sage: d.
d.assume d.contradicts d.dump d.forget d.rename d.save
d.category d.db d.dumps d.has d.reset_name d.version
and keep exploring:
sage: d.has(a)
True
sage: from sage.symbolic.assumptions import GenericDeclaration as GDecl
Read the documentation for GDecl, then the source code.
sage: GDecl?
sage: GDecl??
and detect the use of the _assumption attribute in the source code. Now play with it!
sage: d._assumption
'integer'
sage: 'integer' in (x._assumption for x in assumptions(a))
True
This is beyond the scope of answering your question, but just in case someone finds it interesting and wants to open a trac ticket or two and/or change the code accordingly.
a method 'assumptions' for the class sage.symbolic.assumptions.GenericDeclaration.
make the is_integer method check for the 'integer' assumption as above, for symbolic variables. So far:
sage: a.is_integer()
False
However the source code for this method is
def is_integer(self):
"""
Return True if this expression is known to be an integer.
EXAMPLES::
sage: SR(5).is_integer()
True
"""
return self._gobj.info(info_integer)
in particular the docstring claims it should return True if the expression is known to be an integer.
Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.