Issue 26915: Test identity first in membership operation of ItemsView, ValuesView and Sequence in collections.abc (original) (raw)

Issue26915

Created on 2016-05-03 06:19 by xiang.zhang, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
issue26915.patch xiang.zhang,2016-05-03 06:20 review
issue26915_v2.patch xiang.zhang,2016-05-03 06:24 review
issue26915_s2.patch xiang.zhang,2016-05-05 10:29 review
issue26915_v3.patch xiang.zhang,2016-06-04 08:33 review
issue26915_v4.patch xiang.zhang,2016-06-04 08:42 review
Pull Requests
URL Status Linked Edit
PR 503 merged xiang.zhang,2017-03-06 09:14
PR 553 merged xiang.zhang,2017-03-08 03:16
PR 703 larry,2017-03-17 21:00
Messages (19)
msg264688 - (view) Author: Xiang Zhang (xiang.zhang) * (Python committer) Date: 2016-05-03 06:19
__contains__ operation in ItemsView, ValuesView and Sequence in collections.abc simply test equality with ==. This introduces inconsistent behaviour with built-in containers when encountering objects like NaN, which does not equal to itself. I asked something about this on core-mentorship, see https://mail.python.org/mailman/private/core-mentorship/2016-April/003543.html.
msg264689 - (view) Author: Xiang Zhang (xiang.zhang) * (Python committer) Date: 2016-05-03 06:24
Add issue number to test method name.
msg264764 - (view) Author: Josh Rosenberg (josh.r) * (Python triager) Date: 2016-05-03 20:30
At some point someone really needs to decide if the C layer behavior of performing an identity test before full equality checking is something that should be emulated at the Python layer or not. The current state seems ridiculous, where C containers check identity first simply by using the easier RichCompareBool function, while Python containers have to have the identity-then-equality check rewritten explicitly, which feels like a DRY violation. Makes it harder for non-CPython implementations too, since they end up either not matching CPython behavior, or writing extra code to match the CPython quirks. I have nothing against this patch, but between PyObject_RichCompareBool and the various slightly strange behaviors in the argument parsing format codes (which leads to silly workarounds like _check_int_field in #20858), I feel like the Python code base is getting cluttered with hacks to emulate the hacky C layer.
msg264773 - (view) Author: Xiang Zhang (xiang.zhang) * (Python committer) Date: 2016-05-04 02:34
I agree with you josh. Actually that's what I want to know, consistency. But I don't mention it in my post, so Guido only gives what to do in this case. In this thread, it means does Python code have to keep the invariant mentioned in ?
msg264891 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2016-05-05 08:14
New changeset 1c6cf4010df3 by Raymond Hettinger in branch 'default': Issue 26915: Add identity checks to the collections ABC __contains__ methods. https://hg.python.org/cpython/rev/1c6cf4010df3
msg264892 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2016-05-05 08:17
Xiang, hanks for the patch and for the link to Guido's opinion. Josh, I concur with your sentiments. In this case the burden is light and is likely to prevent future difficulties by keeping the container invariants intact.
msg264896 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2016-05-05 08:25
Is it worth to add a function in the operator module that tests arguments for identity or equality?
msg264898 - (view) Author: Xiang Zhang (xiang.zhang) * (Python committer) Date: 2016-05-05 08:50
In my opinion it's not worth. If there is such an operator in stdlib, I would expect more, exposing PyObject_RichCompareBool in Python level, providing a new operator like `===`.
msg264900 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2016-05-05 09:16
What about Sequence.index and Sequence.count?
msg264902 - (view) Author: Xiang Zhang (xiang.zhang) * (Python committer) Date: 2016-05-05 10:29
Oops, I forgot about them. I think they should. Raymond mentioned count in . Attach patch to take them in.
msg266151 - (view) Author: Xiang Zhang (xiang.zhang) * (Python committer) Date: 2016-05-23 14:13
Reopen this since the solution is not complete pointed out by Serhiy and the new patch has already been attached(s2).
msg267106 - (view) Author: Xiang Zhang (xiang.zhang) * (Python committer) Date: 2016-06-03 15:36
Serhiy, actually the patch(issue26915_s2.patch) I uploaded early has tried to make Sequence.index and Sequence.count consistent. Maybe the issue stage is not right.
msg267124 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2016-06-03 18:09
Oh, sorry, I was absentminded. In general the patch LGTM. But I think that using list subclass for tests is not a good idea. If we make a typo in CustomSequence method name (__contain__, inedx, coumt), the test is still passed. It would be better to use a class that doesn't have any sequence-related methods besides explicitly defined.
msg267247 - (view) Author: Xiang Zhang (xiang.zhang) * (Python committer) Date: 2016-06-04 08:33
Thanks for review Serhiy and nice thoughts. I make the class inherited directly from Sequence. So if the methods in Sequence are OK, the test class is OK.
msg267248 - (view) Author: Xiang Zhang (xiang.zhang) * (Python committer) Date: 2016-06-04 08:42
Oh, sorry. Make the __len__ signature wrong. Change it.
msg269877 - (view) Author: Xiang Zhang (xiang.zhang) * (Python committer) Date: 2016-07-06 10:12
ping
msg271151 - (view) Author: Xiang Zhang (xiang.zhang) * (Python committer) Date: 2016-07-24 13:38
Ping again.
msg290275 - (view) Author: Xiang Zhang (xiang.zhang) * (Python committer) Date: 2017-03-24 22:43
New changeset 78ad039bcf1a8c494cbc8e18380cc30665869c3e by Xiang Zhang in branch '3.6': bpo-26915: Test identity first in index() and count() of collections.abc.Sequence (GH-553) https://github.com/python/cpython/commit/78ad039bcf1a8c494cbc8e18380cc30665869c3e
msg290277 - (view) Author: Xiang Zhang (xiang.zhang) * (Python committer) Date: 2017-03-24 22:43
New changeset d5d3249e8a37936d32266fa06ac20017307a1f70 by Xiang Zhang in branch 'master': bpo-26915: Test identity first in membership operation in index() and count() methods of collections.abc.Sequence (GH-503) https://github.com/python/cpython/commit/d5d3249e8a37936d32266fa06ac20017307a1f70
History
Date User Action Args
2022-04-11 14:58:30 admin set github: 71102
2022-01-20 22:53:07 iritkatriel link issue23162 superseder
2017-03-24 22:43:22 xiang.zhang set messages: +
2017-03-24 22:43:01 xiang.zhang set messages: +
2017-03-17 21:00:35 larry set pull_requests: + <pull%5Frequest609>
2017-03-08 03:44:58 xiang.zhang set status: open -> closedresolution: fixedstage: patch review -> resolved
2017-03-08 03:16:07 xiang.zhang set pull_requests: + <pull%5Frequest454>
2017-03-06 09:14:04 xiang.zhang set pull_requests: + <pull%5Frequest411>
2016-07-24 13:38:52 xiang.zhang set messages: +
2016-07-06 10:12:32 xiang.zhang set messages: +
2016-06-04 08:42:28 xiang.zhang set files: + issue26915_v4.patchmessages: +
2016-06-04 08:33:20 xiang.zhang set files: + issue26915_v3.patchmessages: +
2016-06-03 18:09:43 serhiy.storchaka set stage: needs patch -> patch review
2016-06-03 18:09:34 serhiy.storchaka set messages: +
2016-06-03 15:36:34 xiang.zhang set messages: +
2016-06-03 12:09:32 serhiy.storchaka set resolution: fixed -> (no value)stage: patch review -> needs patch
2016-05-24 07🔞39 rhettinger set assignee: rhettinger ->
2016-05-23 14:13:43 xiang.zhang set status: closed -> openmessages: +
2016-05-05 10:29:16 xiang.zhang set files: + issue26915_s2.patchmessages: +
2016-05-05 09:16:50 serhiy.storchaka set messages: +
2016-05-05 08:50:24 xiang.zhang set messages: +
2016-05-05 08:25:07 serhiy.storchaka set messages: +
2016-05-05 08:17:31 rhettinger set status: open -> closedresolution: fixedmessages: +
2016-05-05 08:14:17 python-dev set nosy: + python-devmessages: +
2016-05-04 02:34:20 xiang.zhang set messages: +
2016-05-03 20:48:39 serhiy.storchaka set assignee: rhettingernosy: + serhiy.storchaka
2016-05-03 20:30:22 josh.r set nosy: + josh.rmessages: +
2016-05-03 06:24:36 xiang.zhang set files: + issue26915_v2.patchmessages: +
2016-05-03 06:23:53 SilentGhost set nosy: + rhettinger, stutzbachtype: behaviorstage: patch review
2016-05-03 06:20:37 xiang.zhang set files: + issue26915.patchkeywords: + patch
2016-05-03 06:19:16 xiang.zhang create