[issue26020] set_display evaluation order doesn't match documented behaviour

2016-09-08 Thread Raymond Hettinger

Changes by Raymond Hettinger :


--
resolution:  -> fixed
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-09-08 Thread Roundup Robot

Roundup Robot added the comment:

New changeset aa2bf603a9bd by Raymond Hettinger in branch '2.7':
Issue #26020: Add news entry
https://hg.python.org/cpython/rev/aa2bf603a9bd

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-09-08 Thread Roundup Robot

Roundup Robot added the comment:

New changeset a8d504600c18 by Raymond Hettinger in branch '2.7':
Issue #26020: Fix evaluation order for set literals
https://hg.python.org/cpython/rev/a8d504600c18

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-09-08 Thread Roundup Robot

Roundup Robot added the comment:

New changeset 0967531fc762 by Raymond Hettinger in branch '3.5':
Issue #26020:  Fix evaluation order for set literals
https://hg.python.org/cpython/rev/0967531fc762

--
nosy: +python-dev

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-07-10 Thread Raymond Hettinger

Raymond Hettinger added the comment:

I've got it.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-07-10 Thread R. David Murray

R. David Murray added the comment:

Ping.  (Raymond, if you are OK with someone else committing this, you could 
un-assign it.)

--
nosy: +r.david.murray

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-04-26 Thread Serhiy Storchaka

Serhiy Storchaka added the comment:

> Please don't forget to fix BUILD_SET_UNPACK to match.

Isn't it already correct?

> Also, please add the following test: "{*{True, 1}}"

Did you meant "{*{True}, *{1}}"?

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-04-26 Thread Neil Girdhar

Neil Girdhar added the comment:

Ah, sorry, I somehow went cross-eyed.  Not sure offhand which test would test 
the BUILD_TUPLE_UNPACK, but I think you're right Serhiy.  Could just add both?

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-04-26 Thread Neil Girdhar

Neil Girdhar added the comment:

Please don't forget to fix BUILD_SET_UNPACK to match.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-04-26 Thread Neil Girdhar

Neil Girdhar added the comment:

Also, please add the following test: "{*{True, 1}}"

Should be True.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-04-26 Thread Serhiy Storchaka

Serhiy Storchaka added the comment:

LGTM.

--
components: +Interpreter Core -Documentation
nosy: +serhiy.storchaka
stage: patch review -> commit review
type:  -> behavior

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-04-26 Thread Raymond Hettinger

Changes by Raymond Hettinger :


--
priority: normal -> high

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-01-06 Thread Hamish Campbell

Hamish Campbell added the comment:

> Do you have a use case where `x == y`/`hash(x) == hash(y)` does not mean that 
> `x` and `y` should be interchangeable? True and 1 are 100% interchangeable, 
> minus their str() output, and my example is very unlikely to ever appear in 
> actual code.

No I don't have a use case :)

> The culprit is the BUILD_SET opcode in Python/ceval.c which unnecessarily 
> loops backwards (it looks like it was copied from the BUILD_TUPLE opcode).

Incidentally, pypy seems to behave the same as reported here.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-01-06 Thread Raymond Hettinger

Changes by Raymond Hettinger :


Added file: http://bugs.python.org/file41518/build_set2.diff

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-01-06 Thread Raymond Hettinger

Changes by Raymond Hettinger :


--
versions: +Python 2.7, Python 3.5

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-01-06 Thread Raymond Hettinger

Changes by Raymond Hettinger :


--
stage:  -> patch review

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-01-05 Thread Raymond Hettinger

Raymond Hettinger added the comment:

The culprit is the BUILD_SET opcode in Python/ceval.c which unnecessarily loops 
backwards (it looks like it was copied from the BUILD_TUPLE opcode).

--
assignee: docs@python -> rhettinger
nosy: +rhettinger

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-01-05 Thread Hamish Campbell

New submission from Hamish Campbell:

It looks like the behaviour of set displays do not match behaviour in some 
cases. The documentation states:

"A set display yields a new mutable set object, the contents being specified by 
either a sequence of expressions or a comprehension. When a comma-separated 
list of expressions is supplied, its elements are evaluated from left to right 
and added to the set object. When a comprehension is supplied, the set is 
constructed from the elements resulting from the comprehension."

Note the following:

   >>> foo = { True, 1 }
   >>> print(foo)
   {1}

However, if we add elements 'left to right':

   >>> foo = set()
   >>> foo.add(True)
   >>> foo.add(1)
   >>> print(foo)
   {True}

Note that similar documentation for dict displays produces the expected result.

"If a comma-separated sequence of key/datum pairs is given, they are evaluated 
from left to right to define the entries of the dictionary: each key object is 
used as a key into the dictionary to store the corresponding datum. This means 
that you can specify the same key multiple times in the key/datum list, and the 
final dictionary’s value for that key will be the last one given."

   >>> foo = {}
   >>> foo[True] = 'bar'
   >>> foo[1] = 'baz'
   >>> print(foo)
   {True: 'baz'}

Which matches the dict display construction:

   >>> foo = { True: 'bar', 1: 'baz'}
   >>> print(foo)
   {True: 'baz'}

Note that I've tagged this as a documentation bug, but it seems like the 
documentation might be the preferred implementation.

--
assignee: docs@python
components: Documentation
messages: 257579
nosy: Hamish Campbell, docs@python
priority: normal
severity: normal
status: open
title: set_display evaluation order doesn't match documented behaviour
versions: Python 2.7, Python 3.2, Python 3.3, Python 3.4, Python 3.5, Python 3.6

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-01-05 Thread Hamish Campbell

Hamish Campbell added the comment:

Note also the differences here:

   >>> print(set([True, 1]))
   {True}
   >>> print({True, 1})
   {1}
   >>> print({x for x in [True, 1]})
   {True}

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-01-05 Thread Hamish Campbell

Hamish Campbell added the comment:

Apologies, that first line should read "It looks like the documentation of set 
displays do not match behaviour in some cases".

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-01-05 Thread Emanuel Barry

Emanuel Barry added the comment:

Set displays appear to be the culprit here:

>>> class A:
...   count = 0
...   def __init__(self):
... self.cnt = self.count
... type(self).count += 1
...   def __eq__(self, other):
... return type(self) is type(other)
...   def __hash__(self):
... return id(type(self))
...
>>> e={A(), A(), A(), A(), A()}
>>> e
{<__main__.A object at 0x002BB2B0>}
>>> list(e)[0].cnt
4
>>> list(e)[0].count
5
>>> A.count = 0
>>> q=set([A(), A(), A(), A(), A()])
>>> q
{<__main__.A object at 0x002BB310>}
>>> list(q)[0].cnt
0
>>> list(q)[0].count
5

I'm guessing this is an optimization and/or set displays just don't keep 
ordering at definition time.

Do you have a use case where `x == y`/`hash(x) == hash(y)` does not mean that 
`x` and `y` should be interchangeable? True and 1 are 100% interchangeable, 
minus their str() output, and my example is very unlikely to ever appear in 
actual code.

Probably just better to fix the docs to specify that sets literals don't check 
ordering.

--
nosy: +ebarry
versions:  -Python 2.7, Python 3.2, Python 3.3, Python 3.4, Python 3.5

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26020] set_display evaluation order doesn't match documented behaviour

2016-01-05 Thread Raymond Hettinger

Changes by Raymond Hettinger :


--
keywords: +patch
Added file: http://bugs.python.org/file41514/build_set.diff

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com