The Unknown truth value¶
The Unknown object is used in Sage in several places as return value
in addition to True and False, in order to signal uncertainty
about or inability to compute the result. Unknown can be identified
using is, or by catching UnknownError from a boolean operation.
Warning
Calling bool() with Unknown as argument will throw an
UnknownError. This also means that in the following cases,
and, not, and or fail or return a somewhat wrong value:
sage: not Unknown # should return Unknown
Traceback (most recent call last):
...
UnknownError: Unknown does not evaluate in boolean context
sage: Unknown and False # should return False
Traceback (most recent call last):
...
UnknownError: Unknown does not evaluate in boolean context
sage: Unknown or False # should return Unknown
Traceback (most recent call last):
...
UnknownError: Unknown does not evaluate in boolean context
>>> from sage.all import *
>>> not Unknown # should return Unknown
Traceback (most recent call last):
...
UnknownError: Unknown does not evaluate in boolean context
>>> Unknown and False # should return False
Traceback (most recent call last):
...
UnknownError: Unknown does not evaluate in boolean context
>>> Unknown or False # should return Unknown
Traceback (most recent call last):
...
UnknownError: Unknown does not evaluate in boolean context
EXAMPLES:
sage: def func(n):
....: if n > 0:
....: return True
....: elif n < 0:
....: return False
....: else:
....: return Unknown
>>> from sage.all import *
>>> def func(n):
... if n > Integer(0):
... return True
... elif n < Integer(0):
... return False
... else:
... return Unknown
Using direct identification:
sage: for n in [-3, 0, 12]:
....: res = func(n)
....: if res is True:
....: print("n={} is positive".format(n))
....: elif res is False:
....: print("n={} is negative".format(n))
....: else:
....: print("n={} is neither positive nor negative".format(n))
n=-3 is negative
n=0 is neither positive nor negative
n=12 is positive
>>> from sage.all import *
>>> for n in [-Integer(3), Integer(0), Integer(12)]:
... res = func(n)
... if res is True:
... print("n={} is positive".format(n))
... elif res is False:
... print("n={} is negative".format(n))
... else:
... print("n={} is neither positive nor negative".format(n))
n=-3 is negative
n=0 is neither positive nor negative
n=12 is positive
Using UnknownError:
sage: for n in [-3, 0, 12]:
....: try:
....: if func(n):
....: print("n={} is positive".format(n))
....: else:
....: print("n={} is negative".format(n))
....: except UnknownError:
....: print("n={} is neither positive nor negative".format(n))
n=-3 is negative
n=0 is neither positive nor negative
n=12 is positive
>>> from sage.all import *
>>> for n in [-Integer(3), Integer(0), Integer(12)]:
... try:
... if func(n):
... print("n={} is positive".format(n))
... else:
... print("n={} is negative".format(n))
... except UnknownError:
... print("n={} is neither positive nor negative".format(n))
n=-3 is negative
n=0 is neither positive nor negative
n=12 is positive
AUTHORS:
Florent Hivert (2010): initial version.
Ralf Stephan, Vincent Delecroix (2018-2020): redesign
- class sage.misc.unknown.UnknownClass[source]¶
Bases:
UniqueRepresentationThe Unknown truth value.
The
Unknownobject is used in Sage in several places as return value in addition toTrueandFalse, in order to signal uncertainty about or inability to compute the result.Unknowncan be identified usingis, or by catchingUnknownErrorfrom a boolean operation.Warning
Calling
bool()withUnknownas argument will throw anUnknownError. This also means that applyingand,not, andortoUnknownmight fail.
- exception sage.misc.unknown.UnknownError[source]¶
Bases:
TypeErrorRaised whenever
Unknownis used in a boolean operation.EXAMPLES:
sage: not Unknown Traceback (most recent call last): ... UnknownError: Unknown does not evaluate in boolean context
>>> from sage.all import * >>> not Unknown Traceback (most recent call last): ... UnknownError: Unknown does not evaluate in boolean context