[issue8743] set() operators don't work with collections.Set instances

2014-05-26 Thread Roundup Robot

Roundup Robot added the comment:

New changeset cd8b5b5b6356 by Raymond Hettinger in branch '3.4':
Issue 8743: Improve interoperability between sets and the collections.Set 
abstract base class.
http://hg.python.org/cpython/rev/cd8b5b5b6356

--

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



[issue8743] set() operators don't work with collections.Set instances

2014-05-26 Thread Raymond Hettinger

Changes by Raymond Hettinger raymond.hettin...@gmail.com:


--
resolution:  - fixed
status: open - closed

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



[issue8743] set() operators don't work with collections.Set instances

2014-05-25 Thread Raymond Hettinger

Raymond Hettinger added the comment:

Attaching a draft patch with tests.

--
Added file: http://bugs.python.org/file35346/fix_set_abc.diff

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



[issue8743] set() operators don't work with collections.Set instances

2014-05-25 Thread Nick Coghlan

Nick Coghlan added the comment:

Ah, interesting - I completely missed the comparison operators in my patch and 
tests. Your version looks good to me, though.

That looks like a patch against 2.7 - do you want to add 2.7  3.4 back to the 
list of target versions for the fix?

--

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



[issue8743] set() operators don't work with collections.Set instances

2014-05-25 Thread Raymond Hettinger

Changes by Raymond Hettinger raymond.hettin...@gmail.com:


--
versions: +Python 2.7, Python 3.4

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



[issue8743] set() operators don't work with collections.Set instances

2014-05-25 Thread Raymond Hettinger

Raymond Hettinger added the comment:

Adding tests for non-set iterables as suggested by Serhiy.

--
Added file: http://bugs.python.org/file35353/fix_set_abc2.diff

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



[issue8743] set() operators don't work with collections.Set instances

2014-05-25 Thread Raymond Hettinger

Raymond Hettinger added the comment:

Added tests that include the pure python sets.Set().  Only the binary 
or/and/sub/xor methods are tested.   

The comparison operators were designed to only interact with their own kind.  A 
comment from Tim Peters explains the decision raise a TypeError instead of 
returning NotImplemented (it has unfortunate interactions with cmp()).  At any 
rate, nothing good would come from changing that design decision now, so I'm 
leaving it alone to fade peacefully into oblivion.

--
Added file: http://bugs.python.org/file35357/fix_set_abc3.diff

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



[issue8743] set() operators don't work with collections.Set instances

2014-05-25 Thread Roundup Robot

Roundup Robot added the comment:

New changeset 3615cdb3b86d by Raymond Hettinger in branch '2.7':
Issue 8743:  Improve interoperability between sets and the collections.Set 
abstract base class.
http://hg.python.org/cpython/rev/3615cdb3b86d

--
nosy: +python-dev

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



[issue8743] set() operators don't work with collections.Set instances

2014-03-20 Thread Raymond Hettinger

Raymond Hettinger added the comment:

Thanks for the patch update.  I will look at it shortly.

--

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



[issue8743] set() operators don't work with collections.Set instances

2014-03-19 Thread Nick Coghlan

Nick Coghlan added the comment:

This didn't make it into 3.4, and the comment about needing a porting note 
above still applies, so to 3.5 it goes.

--
priority: high - normal
versions: +Python 3.5 -Python 3.4

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



[issue8743] set() operators don't work with collections.Set instances

2014-02-02 Thread Nick Coghlan

Nick Coghlan added the comment:

I updated the patch to apply cleanly to the default branch. I also added 
several new test cases which uncovered issues with Daniel's previous patch.

Specifically:

- the reverse functions were not be tested properly (added a separate test to 
ensure they all return NotImplemented when appropriate)

- the checks in the in-place operands were not being tested, and were also too 
strict (added tests for their input checking, and also ensured they still 
accepted arbitrary iterables as input)

I've also reduced the target versions to just 3.4 - this will require a porting 
note in the What's New, since the inappropriate handling of arbitrary iterables 
in the ABC methods has been removed, which means that things that previously 
worked when they shouldn't (like accepting a list as the RHS of a binary set 
operator) will now throw TypeError.

Python 3.3:
 set() | list()
Traceback (most recent call last):
  File stdin, line 1, in module
TypeError: unsupported operand type(s) for |: 'set' and 'list'
 from test.test_collections import WithSet
 WithSet() | list()
test.test_collections.WithSet object at 0x7f71ff2f6210

After applying the attached patch:

 set() | list()
Traceback (most recent call last):
  File stdin, line 1, in module
TypeError: unsupported operand type(s) for |: 'set' and 'list'
 from test.test_collections import WithSet
 WithSet() | list()
Traceback (most recent call last):
  File stdin, line 1, in module
TypeError: unsupported operand type(s) for |: 'WithSet' and 'list'

--
versions:  -Python 2.7, Python 3.2, Python 3.3
Added file: 
http://bugs.python.org/file33863/issue8743-set-ABC-interoperability.diff

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



[issue8743] set() operators don't work with collections.Set instances

2014-02-02 Thread Nick Coghlan

Nick Coghlan added the comment:

I initially missed Mark's suggestion above to avoid the recursive subtraction 
operation in __rsub__. v2 of my patch includes that tweak.

--
Added file: 
http://bugs.python.org/file33864/issue8743-set-ABC-interoperability_v2.diff

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



[issue8743] set() operators don't work with collections.Set instances

2014-02-02 Thread Serhiy Storchaka

Serhiy Storchaka added the comment:

I think set operations with iterable (but not set) should be tested.

--

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



[issue8743] set() operators don't work with collections.Set instances

2014-01-31 Thread Yury Selivanov

Changes by Yury Selivanov yselivanov...@gmail.com:


--
nosy: +yselivanov

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



[issue8743] set() operators don't work with collections.Set instances

2014-01-04 Thread Nick Coghlan

Nick Coghlan added the comment:

Raymond, will you have a chance to look at this before 3.4rc1? Otherwise I'd 
like to take it.

--

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



[issue8743] set() operators don't work with collections.Set instances

2013-11-27 Thread Martin Dengler

Changes by Martin Dengler mar...@martindengler.com:


--
nosy: +mdengler

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



[issue8743] set() operators don't work with collections.Set instances

2013-05-21 Thread Nick Coghlan

Nick Coghlan added the comment:

Armin pointed out in 
http://lucumr.pocoo.org/2013/5/21/porting-to-python-3-redux/ that one nasty 
consequence of the remaining part of issue 2226 and this bug is making it much 
harder than it should be to use the ItemsView, KeysView and ValuesView from 
collections.abc to implement third party mappings that behave like the builtin 
dict.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2013-05-20 Thread Nick Coghlan

Changes by Nick Coghlan ncogh...@gmail.com:


--
nosy: +ncoghlan

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2012-10-31 Thread Serhiy Storchaka

Changes by Serhiy Storchaka storch...@gmail.com:


--
nosy: +serhiy.storchaka
versions: +Python 3.4

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2012-10-31 Thread Jesús Cea Avión

Changes by Jesús Cea Avión j...@jcea.es:


--
nosy: +jcea

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2012-10-31 Thread Jesús Cea Avión

Jesús Cea Avión added the comment:

Heads up, Issue #16373.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2012-10-31 Thread Andrew Svetlov

Changes by Andrew Svetlov andrew.svet...@gmail.com:


--
nosy: +asvetlov

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2012-10-31 Thread Raymond Hettinger

Changes by Raymond Hettinger raymond.hettin...@gmail.com:


--
assignee: stutzbach - rhettinger

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2012-03-14 Thread Mark Shannon

Mark Shannon m...@hotpy.org added the comment:

Review of set-with-Set.patch:

Looks good overall. 
I agree that restricting operations to instances of Set rather than Iterable is 
correct.

Implementing __rsub__ in terms of - (subtraction) means that infinite 
recursion is a possibility. It also creates an unnecessary temporary.
Could you just reverse the expression used in __sub__?

Would you add tests for comparisons; Set() == set(), etc.
There are probably tested implicitly in the rest of the test suite, but 
explicit tests would be good.

--
nosy: +Mark.Shannon

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2011-08-18 Thread Meador Inge

Changes by Meador Inge mead...@gmail.com:


--
resolution: accepted - 
stage: needs patch - patch review

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2011-06-26 Thread Terry J. Reedy

Changes by Terry J. Reedy tjre...@udel.edu:


--
versions: +Python 3.3 -Python 3.1

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2011-06-12 Thread Terry J. Reedy

Terry J. Reedy tjre...@udel.edu added the comment:

If the code were acting exactly as documented, I would consider this a feature 
request. But require that the parameter also be an instance of set() (from 
original message) is too limited.

 set() | frozenset()
set()

So 'set' in their operator based counterparts require their arguments to be 
sets. (doc) seems to be meant to be more generic, in which case 'instance of 
collections.Set' seems reasonable. To be clear, the doc could be updated to 
... sets, frozensets, and other instances of collections.Set.

Both set and frozenset support set to set comparisons.  This includes 
comparisons between the two classes.

 set() == frozenset()
True

so perhaps comparisons should be extended also.

--
nosy: +terry.reedy

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2011-01-26 Thread David Stanek

Changes by David Stanek dsta...@dstanek.com:


--
nosy: +dstanek

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-12-14 Thread Daniel Stutzbach

Daniel Stutzbach stutzb...@google.com added the comment:

Would it be sufficient to:

1) Restrict collections.Set()'s operators to accept collection.Set but not 
arbitrary iterables, and
2) Fix Issue2226 and let set() | MySimpleSet() work via collections.Set.__ror__

Attached is a patch that implements this approach, nominally fixing both this 
and Issue2226.

This solutions seems much too simple in light of how long I've been thinking 
about these bugs.  I suspect there are code hobgoblins waiting to ambush me. ;)

--
Added file: http://bugs.python.org/file20045/set-with-Set.patch

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-12-01 Thread Daniel Urban

Changes by Daniel Urban urban.dani...@gmail.com:


--
nosy: +durban

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-11-30 Thread Raymond Hettinger

Raymond Hettinger rhettin...@users.sourceforge.net added the comment:

Daniel, do you have time to work on this one?

If so, go ahead an make setobject.c accept any instance of collections.Set and 
make the corresponding change to the ABCs:

def __or__(self, other):
if not isinstance(other, Set):
return NotImplemented
chain = (e for s in (self, other) for e in s)
return self._from_iterable(chain)

The code in the attached prelim.patch has working C code isinstance(x, 
collections.Set), but the rest of the patch that applies is has not been 
tested.  It needs to be applied very carefully and thoughtfully because:
* internally, the self and other can get swapped on a binary call
* we can't make *any* assumptions about other (that duplicates have actually 
been eliminated or the the elements are even hashable).

The most reliable thing to do for the case where PyAnySet(obj) is False but 
isinstance(obj, collections.Set) is true is to call the named method such as 
s.union(other) instead of continuing with s.__or__ which was designed only with 
real sets in mind.

--
assignee: rhettinger - stutzbach

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-11-30 Thread Daniel Stutzbach

Daniel Stutzbach stutzb...@google.com added the comment:

Yes, I can take a stab at it.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-11-30 Thread Raymond Hettinger

Raymond Hettinger rhettin...@users.sourceforge.net added the comment:

No need to rush this for the beta.  It's a bug fix and can go in at any time.  
The important thing is that we don't break the C code.  The __ror__ magic 
method would still need to do the right thing and the C code needs to defend 
against the interpreter swapping self and other.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-11-29 Thread Raymond Hettinger

Changes by Raymond Hettinger rhettin...@users.sourceforge.net:


--
Removed message: http://bugs.python.org/msg117005

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-09-20 Thread Raymond Hettinger

Raymond Hettinger rhettin...@users.sourceforge.net added the comment:

After discussion on IRC, have decided to make the Set ABC more closely match 
setobject.c:

1) loosen setobject.c binary operations to accept any Set rather than any 
set/frozenset (see attached patch).

2) tighten Set.__or__, etc to only accept Set rather than any Iterable

3) add Set.update(), Set.difference(), etc so that iterable inputs can be 
handled without a first casting an iterable input to be a Set.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-09-20 Thread Raymond Hettinger

Changes by Raymond Hettinger rhettin...@users.sourceforge.net:


--
Removed message: http://bugs.python.org/msg116998

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-09-20 Thread Raymond Hettinger

Raymond Hettinger rhettin...@users.sourceforge.net added the comment:

After discussion on IRC, have decided to make the Set ABC more closely match 
setobject.c by loosening setobject.c binary operations to accept any Iterable 
rather than any just a set/frozenset.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-09-02 Thread Raymond Hettinger

Raymond Hettinger rhettin...@users.sourceforge.net added the comment:

Rough cut at a first patch is attached.

Still thinking about whether Set operations should be accepting any iterable or 
whether they should be tightened to expect other Set instances.  The API for 
set() came from set.py which was broadly discussed and widely exercised.  Guido 
was insistent that non-sets be excluded from the operator interactions 
(list.__iadd__ being on his list of regrets).   That was probably a good 
decision, but the Set API violated this norm and it did not include named 
methods like difference(), update(), and intersection() to handle the iterable 
cases.

Also, still thinking about whether the comparison operators should be making 
tight or loose checks.

--
keywords: +patch
Added file: http://bugs.python.org/file18708/prelim.patch

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-09-01 Thread Daniel Stutzbach

Daniel Stutzbach dan...@stutzbachenterprises.com added the comment:

Raymond, do you agree with Ray's analysis?

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-09-01 Thread Raymond Hettinger

Raymond Hettinger rhettin...@users.sourceforge.net added the comment:

The operator methods in setobject.c should be liberalized to accept instances 
of collections.Set as arguments.  For speed, they should continue to check 
PyAnySet_Check(other) first and then if that fails, fall back to testing 
PyObject_IsInstance(other, collections.Set).  

Internally, the set methods will still need to process other as just an 
iterable container because it cannot rely on elements in other as being 
hashable (for example, the ListBasedSet in the docs does not require 
hashability) or unique (as perceived by setobject.c it may not work with some 
set implementing a key-function for an equivalence class whose key-function 
would be unknown to setobject.c which relies on __hash__ and __eq__).

To implement PyObject_IsInstance(other, collections.Set), there may be a 
bootstrap issue (with the C code being compiled and runnable before _abcoll.py 
is able to create the Set ABC).  If so, it may be necessary to create an 
internal _BaseSet object in setobject.c that can be used in collections.Set.  
Alternatively, the code in setobject.c can lazily (at runtime) lookup 
collections.Set by name and cache it so that we only do one successful lookup 
per session.

Whatever approach is taken, it should be done with an eye towards the larger 
problem that Python is filled with concrete isinstance() checks that pre-date 
ABCs and many of those need to be liberalized (accepting a registered ABC and 
providing different execution paths for known and unknown concrete types).

--
stage: unit test needed - needs patch

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-09-01 Thread Daniel Stutzbach

Daniel Stutzbach dan...@stutzbachenterprises.com added the comment:

 The operator methods in setobject.c should be liberalized to accept
 instances of collections.Set as arguments.

Under this plan, set() and collections.Set will still have slightly different 
behavior.  collections.Set will be more liberal and accept any iterable.  Are 
you okay with that?  I don't feel strongly about this point; I just want to 
make sure it's a conscious decision.

I do feel strongly that set and collections.Set should be able to inter-operate 
nicely and the proposal satisfies that requirement so I would be happy with it.

 To implement PyObject_IsInstance(other, collections.Set), there may
 be a bootstrap issue (with the C code being compiled and runnable
 before _abcoll.py is able to create the Set ABC). Alternatively, 
 the code in setobject.c can lazily (at runtime) lookup 
 collections.Set by name and cache it so that we only do one
 successful lookup per session.

I favor the lazy lookup approach.

 Whatever approach is taken, it should be done with an eye towards 
 the larger problem that Python is filled with concrete isinstance()
 checks that pre-date ABCs and many of those need to be liberalized
 (accepting a registered ABC and providing different execution paths
 for known and unknown concrete types).

Agreed.  Ideally, the PyObject_IsInstance(other, collections.Set) logic would 
be abstracted out as much as possible so other parts of Python can make similar 
checks without needing tons of boilerplate code in every spot.

For what it's worth, I don't think we will find as many inconsistency issues 
with ABCs other than Set.  Set has methods that take another Set and return a 
third Set.  That forces different concrete implementations of the Set ABC to 
interact in a way that won't come up for a Sequence or Mapping.

(I suppose that Sequence.extend or MutableMapping.update are somewhat similar, 
but list.extend and dict.update are already very liberal in what they accept as 
a parameter.)

--
resolution:  - accepted
versions: +Python 3.1

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-08-22 Thread Raymond Hettinger

Changes by Raymond Hettinger rhettin...@users.sourceforge.net:


--
priority: normal - high

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-08-22 Thread Guido van Rossum

Changes by Guido van Rossum gu...@python.org:


--
nosy:  -gvanrossum

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-08-02 Thread Ray.Allen

Ray.Allen ysj@gmail.com added the comment:

In my opinion, the set's operator should be a bit more liberal and accept any 
collections.Set instances. Given collections.Set is an ABC and isinstance(set, 
collections.Set) is True, the set methods should(strong recommended) follow all 
the generalized abstract semantic definition in the ABC. This according to PEP 
3119:

In addition, the ABCs define a minimal set of methods that establish the 
characteristic behavior of the type. Code that discriminates objects based on 
their ABC type can trust that those methods will always be present. Each of 
these methods are accompanied by an generalized abstract semantic definition 
that is described in the documentation for the ABC. These standard semantic 
definitions are not enforced, but are strongly recommended.


The collections.Set defines __or__() as this (for example):

def __or__(self, other):
if not isinstance(other, Iterable):
return NotImplemented
chain = (e for s in (self, other) for e in s)
return self._from_iterable(chain)

which means the | operator should accept all iterable. So I think it's better 
to make set's methods should be more liberal.

--
nosy: +ysj.ray

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-08-01 Thread Georg Brandl

Changes by Georg Brandl ge...@python.org:


--
assignee:  - rhettinger
nosy: +rhettinger

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-08-01 Thread Raymond Hettinger

Raymond Hettinger rhettin...@users.sourceforge.net added the comment:

Guido, do you have a recommendation?

--
assignee: rhettinger - gvanrossum
nosy: +gvanrossum

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-08-01 Thread Guido van Rossum

Guido van Rossum gu...@python.org added the comment:

No idea, I don't even know what collections.Set is. :-(

--
assignee: gvanrossum - 

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-08-01 Thread Raymond Hettinger

Changes by Raymond Hettinger rhettin...@users.sourceforge.net:


--
assignee:  - rhettinger

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-05-17 Thread Daniel Stutzbach

New submission from Daniel Stutzbach dan...@stutzbachenterprises.com:

The set() operators (__or__, __and__, __sub__, __xor__, and their in-place 
counterparts) require that the parameter also be an instance of set().

They're documented that way:  This precludes error-prone constructions like 
set('abc')   'cbs' in favor of the more readable 
set('abc').intersection('cbs').

However, an unintended consequence of this behavior is that they don't 
inter-operate with user-created types that derive from collections.Set.

That leads to oddities like this:

MySimpleSet() | set()  # This works
set() | MySimpleSet()  # Raises TypeError

(MySimpleSet is a minimal class derived from collections.Set for illustrative 
purposes -- set attached file)

collections.Set's operators accept any iterable.

I'm not 100% certain what the correct behavior should be.  Perhaps set's 
operators should be a bit more liberal and accept any collections.Set instance, 
while collections.Set's operators should be a bit more conservative.  Perhaps 
not.  It's a little subjective.

It seems to me that at minimum set() and collections.Set() should inter-operate 
and have the same behavior.

--
components: Interpreter Core
files: set-vs-set.py
messages: 105929
nosy: stutzbach
priority: normal
severity: normal
stage: unit test needed
status: open
title: set() operators don't work with collections.Set instances
type: behavior
versions: Python 2.7, Python 3.2
Added file: http://bugs.python.org/file17383/set-vs-set.py

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue8743] set() operators don't work with collections.Set instances

2010-05-17 Thread Daniel Stutzbach

Daniel Stutzbach dan...@stutzbachenterprises.com added the comment:

I should add:

I discovered the inconsistency while working on my sortedset class, which 
provides the same interface as set() but is also indexable like a list (e.g., 
S[0] always returns the minimum element, S[-1] returns the maximum element, 
etc.).

sortedset derives from collections.MutableSet, but it's challenging to 
precisely emulate set() when collections.MutableSet and set() don't work the 
same way. ;-)

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue8743
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com