On Mon, Aug 31, 2015 at 4:38 PM, Tim Peters <[email protected]> wrote:

> [Tim]
> >> The easiest way out of this particular puzzle is, I believe, to say
> >> that two datetimes identical except for `fold` do _not_ compare equal.
> >> `fold` breaks the tie in the obvious way (the one with fold==1 is
> >> "greater").
>
> [Alex]
> > I am afraid you are right, but proving that we will not break naive (fold
> > unaware) programs will be harder in this case.   Let me think some more
> > about this.
> >
> > Meanwhile, would you see any problem with not(x - y) not implying x == y?
>
> Which is another puzzle :-(  It's very intentional now that
>
>     dt1 == dt2 if and only if dt1 - dt2 == timedelta(0)
>
> Here's a related puzzle, if comparison used `fold` to break ties:
>
>     y = x + timedelta(0)
>
> If x had first=1, y will have fold=0, and then x != y.
>
> In all, maybe it's better to leave __hash__ slightly broken.
>

After some thought, I believe the way to fix the implementation is what I
suggested at first: reset fold to 0 before calling utcoffset() in
__hash__.  A rare hash collision is a small price to pay for having
datetimes with different timezones in the same dictionary.

Now, please, can we not start discussing how __hash__ should behave if
utcoffset() raises a MissingTimeError?
_______________________________________________
Datetime-SIG mailing list
[email protected]
https://mail.python.org/mailman/listinfo/datetime-sig
The PSF Code of Conduct applies to this mailing list: 
https://www.python.org/psf/codeofconduct/

Reply via email to