Title: bool of large range raises OverflowError
Type: behavior Stage: resolved
Components: Interpreter Core Versions: Python 3.7, Python 3.6, Python 3.5
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: rhettinger Nosy List: akira, inada.naoki, mark.dickinson, rhettinger, serhiy.storchaka
Priority: normal Keywords: patch

Created on 2016-12-05 09:37 by mark.dickinson, last changed 2017-03-20 07:39 by serhiy.storchaka. This issue is now closed.

File name Uploaded Description Edit
range_bool.patch akira, 2016-12-05 12:27
range_bool-no_docs.patch akira, 2016-12-06 07:50 no docs updates
range_bool-c99-designated-initializers.patch akira, 2017-01-22 13:17 use c99 designated initializers
range_bool-c99-designated-initializers-indent.patch akira, 2017-01-23 15:00 use 4-space indent, space around "="
Pull Requests
URL Status Linked Edit
PR 699 merged akira, 2017-03-17 19:31
PR 734 merged serhiy.storchaka, 2017-03-20 06:48
PR 735 merged serhiy.storchaka, 2017-03-20 07:13
Messages (15)
msg282402 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2016-12-05 09:37
The bool of a large range raises OverflowError:

    >>> bool(range(2**63))
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    OverflowError: Python int too large to convert to C ssize_t

This is a side-effect of len raising OverflowError, which is a general problem that's nontrivial to fix (the sq_length slot is constrained to return a ssize_t). In theory, though, it would be possible to implement nb_bool for range objects to do the right thing.

In practice, this may well not be worth fixing, though I think it's at least worth reporting.
msg282405 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2016-12-05 09:54
+1 for implementing nb_bool for range objects.
msg282414 - (view) Author: Akira Li (akira) * Date: 2016-12-05 12:27
Here's a patch with range_bool() implementation, tests and the docs update.

I'm not sure how it should be documented. I've specified it as 
versionchanged:: 3.6
msg282418 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2016-12-05 13:13
> I'm not sure how it should be documented.

I think a change at this level probably isn't worth documenting in the official docs; it's enough that there's a Misc/NEWS entry for it.
msg282506 - (view) Author: Akira Li (akira) * Date: 2016-12-06 07:50
I've removed the documentation changes from the patch.
msg283137 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2016-12-13 19:46
Patch LGTM. You could safely drop the initialisers beyond `nb_bool` in the `range_as_number` struct (per C99 6.7.8p21), but it's fine as it is.
msg286008 - (view) Author: Akira Li (akira) * Date: 2017-01-22 13:17
Following the python-dev discussion [1] I've added a variant of the patch that uses c99 designated initializers [2]

msg286048 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2017-01-23 05:50
This patch looks ready to go.  I'll wait a bit to see it there are any other comments.  If not, I'll apply it shortly.
msg286055 - (view) Author: INADA Naoki (inada.naoki) * (Python committer) Date: 2017-01-23 07:32
LGTM, except 2-space indent.
msg286089 - (view) Author: Akira Li (akira) * Date: 2017-01-23 15:00
I've updated the patch to use 4-space indent (pep-7).

I've added space around "=" (pep-7); unlike the usual
"dict(designator=value)" -- no space around "=" for keyword argument
msg286092 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2017-01-23 16:15
Latest patch LGTM too.
msg289772 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2017-03-17 17:27
Akira, could you open a pull request on GitHub?
msg289778 - (view) Author: Akira Li (akira) * Date: 2017-03-17 19:40
> Akira, could you open a pull request on GitHub?

Done. PR 699
msg289786 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2017-03-17 21:09
In issue29840 proposed an alternate and more general solution. But I think that nb_bool should be implemented for range objects since issue29840 is 3.7 only and nb_bool is faster.
msg289876 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2017-03-20 07:39
Thank you Akira for your patch.
Date User Action Args
2017-03-20 07:39:08serhiy.storchakasetstatus: open -> closed
resolution: fixed
messages: + msg289876

stage: patch review -> resolved
2017-03-20 07:13:20serhiy.storchakasetpull_requests: + pull_request649
2017-03-20 06:48:06serhiy.storchakasetpull_requests: + pull_request648
2017-03-17 21:09:22serhiy.storchakasetmessages: + msg289786
stage: needs patch -> patch review
2017-03-17 19:40:39akirasetmessages: + msg289778
2017-03-17 19:31:41akirasetpull_requests: + pull_request572
2017-03-17 17:27:35serhiy.storchakasetmessages: + msg289772
2017-03-17 08:36:16serhiy.storchakalinkissue29833 dependencies
2017-01-23 16:15:21mark.dickinsonsetmessages: + msg286092
2017-01-23 15:00:58akirasetfiles: + range_bool-c99-designated-initializers-indent.patch

messages: + msg286089
2017-01-23 07:32:28inada.naokisetnosy: + inada.naoki
messages: + msg286055
2017-01-23 05:50:15rhettingersetassignee: rhettinger
messages: + msg286048
2017-01-22 13:17:19akirasetfiles: + range_bool-c99-designated-initializers.patch

messages: + msg286008
2016-12-13 19:46:41mark.dickinsonsetmessages: + msg283137
2016-12-06 07:50:44akirasetfiles: + range_bool-no_docs.patch

messages: + msg282506
2016-12-05 13:13:09mark.dickinsonsetmessages: + msg282418
2016-12-05 12:27:37akirasetfiles: + range_bool.patch

nosy: + akira
messages: + msg282414

keywords: + patch
2016-12-05 10:47:43serhiy.storchakasetnosy: + serhiy.storchaka

stage: needs patch
2016-12-05 09:54:59rhettingersetnosy: + rhettinger
messages: + msg282405
2016-12-05 09:37:42mark.dickinsoncreate