1. Dates beyond year 9999 aren't a prerequisite for infinite types - I see that as a separate issue. The fact that we can't represent dates between 9999 and infinity doesn't make infinity less useful :)
2 & 3. Yeah, string representation is something that needs to be decided on - that's a big potential bikeshed. My preference at this stage would be for these to be called e.g. date.inf_future and date.inf_past, and the string representation to be the same. timedelta could simply have timedelta.infinity, and since it supports __neg__, -timedelta.infinity would work just fine. I'd like to hear other views though.
4. In my implementation, `datetime.now() - DATETIME_NEG_INF == TIMEDELTA_POS_INF`. I haven't implemented the division dunder methods yet, but by analogy to float, I would say that `TIMEDELTA_POS_INF / timedelta(days=1) == float("inf")` and `TIMEDELTA_POS_INF // timedelta(days=1)` raises TypeError (the latter returns nan in the case of float).
Thanks,
Alex