Re: [Python-ideas] Improve ABCs _dump_registry() readability

2017-12-31 Thread Ivan Levkivskyi
On 31 December 2017 at 20:05, Antoine Pitrou  wrote:

> On Sun, 31 Dec 2017 19:31:06 +0100
> Ivan Levkivskyi 
> wrote:
>
> > On 31 December 2017 at 19:24, Yahya Abou 'Imran via Python-ideas <
> > python-ideas@python.org> wrote:
> >
> > >
> > > >I guess a PR to fix the registry output would make sense (first file a
> > > bug on bugs.python.org for it).
> > >
> > > Ok, I will!
> > >
> > >
> > Please don't hurry with this. I am going to rewrite ABCMeta in C soon.
> > In fact most of the work is done but I am waiting for implementation of
> PEP
> > 560 to settle (need few more days for this).
> >
> > In the C version the caches/registry will be simpler and will not use
> > WeakSet (instead they will be thin C wrappers around normal sets).
>
> Hmm... Just because you are rewriting the thing in C doesn't mean that
> Yahya shouldn't submit a patch for the Python version (which I assume
> will be staying around anyway).
>

Yes, good point!

--
Ivan
___
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/


Re: [Python-ideas] Improve ABCs _dump_registry() readability

2017-12-31 Thread Antoine Pitrou
On Sun, 31 Dec 2017 19:31:06 +0100
Ivan Levkivskyi 
wrote:

> On 31 December 2017 at 19:24, Yahya Abou 'Imran via Python-ideas <
> python-ideas@python.org> wrote:
> 
> >  
> > >I guess a PR to fix the registry output would make sense (first file a  
> > bug on bugs.python.org for it).
> >
> > Ok, I will!
> >
> >  
> Please don't hurry with this. I am going to rewrite ABCMeta in C soon.
> In fact most of the work is done but I am waiting for implementation of PEP
> 560 to settle (need few more days for this).
> 
> In the C version the caches/registry will be simpler and will not use
> WeakSet (instead they will be thin C wrappers around normal sets).

Hmm... Just because you are rewriting the thing in C doesn't mean that
Yahya shouldn't submit a patch for the Python version (which I assume
will be staying around anyway).

Regards

Antoine.


___
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/


Re: [Python-ideas] Improve ABCs _dump_registry() readability

2017-12-31 Thread Ivan Levkivskyi
On 31 December 2017 at 19:24, Yahya Abou 'Imran via Python-ideas <
python-ideas@python.org> wrote:

>
> >I guess a PR to fix the registry output would make sense (first file a
> bug on bugs.python.org for it).
>
> Ok, I will!
>
>
Please don't hurry with this. I am going to rewrite ABCMeta in C soon.
In fact most of the work is done but I am waiting for implementation of PEP
560 to settle (need few more days for this).

In the C version the caches/registry will be simpler and will not use
WeakSet (instead they will be thin C wrappers around normal sets).

--
Ivan
___
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/


Re: [Python-ideas] Improve ABCs _dump_registry() readability

2017-12-31 Thread Guido van Rossum
Yeah, I guess few developers have needed to use _dump_registry(), and also
it's easy enough to just access e.g. Iterator._abc_registry yourself.

The reason Iterator._abc_registry is empty is that no class directly
registered with it -- they are all registered with e.g. Sequence. The cache
includes classes registered with subclasses, but the registry itself does
not.

I guess a PR to fix the registry output would make sense (first file a bug
on bugs.python.org for it).

On Sat, Dec 30, 2017 at 11:19 PM, Yahya Abou 'Imran via Python-ideas <
python-ideas@python.org> wrote:

> In python 2.7, ABCs's caches and registries are sets. But in python 3.6
> they are WeakSet.
> In consequence, the output of _dump_registry() is almost useless:
>
> >>> from collections import abc
> >>> abc.Iterator._dump_registry()
> Class: collections.abc.Iterator
> Inv.counter: 40
> _abc_cache: <_weakrefset.WeakSet object at 0x7f4b58fe2668>
> _abc_negative_cache: <_weakrefset.WeakSet object at 0x7f4b53283780>
> _abc_negative_cache_version: 40
> _abc_registry: <_weakrefset.WeakSet object at 0x7f4b58fe2630>
>
> We could convert them into a regular set before printing:
>
> if isinstance(value, WeakSet):
> value = set(value)
>
> The result:
>
> >>> abc.Iterator._dump_registry()
> Class: collections.abc.Iterator
> Inv.counter: 40
> _abc_cache: {, ,
> , ,  'dict_keyiterator'>, , ,  'set_iterator'>, , ,
> , ,  'bytes_iterator'>}
> _abc_negative_cache: set()
> _abc_negative_cache_version: 40
> _abc_registry: set()
>
>
> NB: It seems pretty weird to me that registry is empty... All the
> iterators in the cache should've been in the registry instead, should'nt
> they?
> ___
> Python-ideas mailing list
> Python-ideas@python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>



-- 
--Guido van Rossum (python.org/~guido)
___
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/


[Python-ideas] Improve ABCs _dump_registry() readability

2017-12-30 Thread Yahya Abou 'Imran via Python-ideas
In python 2.7, ABCs's caches and registries are sets. But in python 3.6 they 
are WeakSet.
In consequence, the output of _dump_registry() is almost useless:

>>> from collections import abc
>>> abc.Iterator._dump_registry()
Class: collections.abc.Iterator
Inv.counter: 40
_abc_cache: <_weakrefset.WeakSet object at 0x7f4b58fe2668>
_abc_negative_cache: <_weakrefset.WeakSet object at 0x7f4b53283780>
_abc_negative_cache_version: 40
_abc_registry: <_weakrefset.WeakSet object at 0x7f4b58fe2630>

We could convert them into a regular set before printing:

if isinstance(value, WeakSet):
value = set(value)

The result:

>>> abc.Iterator._dump_registry()
Class: collections.abc.Iterator
Inv.counter: 40
_abc_cache: {, , , , , 
, , , , , , , }
_abc_negative_cache: set()
_abc_negative_cache_version: 40
_abc_registry: set()


NB: It seems pretty weird to me that registry is empty... All the iterators in 
the cache should've been in the registry instead, should'nt they?
___
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/