On 01/12/15 15:01, kcrisman wrote:

This is inconsistent (and documented ;-).



But is it documented someplace easy for Sage users to find?  Thanks!


I would say "no". It is in the `__init__` method of the `UnknownClass`. It should be moved to the main documentation class.

For the operations "or" and
"and" Python actually uses "__nonzero__". *Not* "__or__" and "__and__"
which are the bitwise operation "|" and "&".

They work as follows:

In "x and y" if "x.__nonzero__()" is False then the result is "x"
otherwise it is "y".

In "x or y" if "x.__nonzero__()" is True then the result is "x" and
otherwise it is "y".

Examples:

sage: 5 and 4 and 19
19
sage: 4 and 0 and 12
0
sage: 0 or 7
7

Similarly, even if X and Y are not defined you can write

sage: False and X and Y
False

The only way to fix Unknown would be to patch (non trivially) Python.
Boolean inherits from int... and it would be hard to have a third party
"Unknown" coherent with this inheritance. There was a slightly related
proposal, PEP 335, which was rejected with good reasons. We could
propose a new PEP for trooleans but it is not clear what should be the
concrete implementation.

Vincent

On 25/11/15 01:56, kcrisman wrote:
On social media:

sage: False or Unknown
Unknown
sage: Unknown or False
False
sage: False and Unknown
False
sage: Unknown and False
Unknown

It does seems somewhat inconsistent...




--
You received this message because you are subscribed to the Google Groups 
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-support+unsubscr...@googlegroups.com.
To post to this group, send email to sage-support@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-support.
For more options, visit https://groups.google.com/d/optout.

Reply via email to