Equality and Coercion could be harmful
The goal of this page is to gather all problems due to equality accepting coercion in borderline cases:
sage: bool(pi == 3.14159265358979323) True sage: hash(pi) 2943215493 sage: hash(3.14159265358979323) 1826823505
But gathered from Python 2.7 documentation:
object.__hash__(self) Called by built-in function hash() and for operations on members of hashed collections including set, frozenset, and dict. __hash__() should return an integer. The only required property is that objects which compare equal have the same hash value;
As a first consequence of the above behavior:
sage: {3.1415926535897932: 'approx', pi: 'exact'} {3.1415926535897932: 'approx', pi: 'exact'} sage: {0:"exact", 0.0000000000000000000:"approx"} {0: 'approx'}
And also:
sage: pii = 3.14159265358979323 sage: bool(pii == pi) True sage: dd = {pi: "exact"} sage: pi in dd True sage: pii in dd False sage: pii in dd.keys() True
More strange consequences when using UniqueRepresentation
sage: F1 = FiniteEnumeratedSet([0.000000]) sage: F2 = FiniteEnumeratedSet([0]) sage: F1 is F2 True sage: F2.list() [0.000000000000000] sage: