Re: 2to3 used in the Shootout

2009-01-02 Thread Isaac Gouy
On Dec 29 2008, 8:36 am, prueba...@latinmail.com wrote:
> On Dec 23, 5:21 pm, Isaac Gouy  wrote:
>
> > On Dec 23, 11:51 am, bearophileh...@lycos.com wrote:
>
> > > They have translated the Python benchmarks of theShootoutsite from
> > > Py2 to Py3 using 2to3:
>
> > >http://shootout.alioth.debian.org/u32/benchmark.php?test=all〈=pyt...
>
> > So please re-write those programs to remove problems created by
> > automatic translation and better take advantage of Python 3
> > functionality...
>
> >http://shootout.alioth.debian.org/u32/faq.php#play
>
> > > It shows some "performance bugs" of Python3 itself (especially
> > > regarding the binary-trees benchmark, that was unexpected by me), and
> > > two points where 2to3 may be improved, for example after the
> > > translation this gives error:
> > >          table=string.maketrans('ACBDGHK\nMNSRUTWVYacbdghkmnsrutwvy',
> > >                                 'TGVHCDM
> > > \nKNSYAAWBRTGVHCDMKNSYAAWBR')):
>
> > > Gives:
> > > TypeError: maketrans arguments must be bytes objects
>
> > > Bye,
> > > bearophile
>
> BTW I am not sure how to submit this or if this is actually valid to
> do, but I have a faster version for the pidigits program that uses
> basically the same algorithm but removes function calls and unused
> terms of the formula.
>
> 
> import time
>
> def pi_digits(n, width):
>     out = []
>     wrt = out.append
>     aq = 1
>     ar = 0
>     at = 1
>     k = 0
>     f = 1
>     g = 2
>     i = 0
>     while i < n:
>         y = (aq*3+ar)//at
>         while y != ((aq*4+ar)//at):
>             k += 1
>             f += 2
>             g += 4
>             ar = aq*g+ar*f
>             aq = aq*k
>             at = at*f
>             y = (aq*3+ar)//at
>         aq = 10*aq
>         ar = 10*ar-10*y*at
>         i += 1
>         wrt(str(y))
>         if not i%width:
>             wrt('\t:%d\n'%i)
>     wrt(' '*(width-i%width))
>     wrt('\t:%d\n'%i)
>     return ''.join(out)
>
> def main():
>     begin = time.time()
>     n = 1000
>     width = 70
>     print pi_digits(n,width)
>     print 'Total Time:', time.time()-begin
>
> main()
>
> 


http://shootout.alioth.debian.org/u32q/faq.php#play
--
http://mail.python.org/mailman/listinfo/python-list


Re: 2to3 used in the Shootout

2008-12-29 Thread pruebauno
On Dec 23, 5:21 pm, Isaac Gouy  wrote:
> On Dec 23, 11:51 am, bearophileh...@lycos.com wrote:
>
> > They have translated the Python benchmarks of the Shootout site from
> > Py2 to Py3 using 2to3:
>
> >http://shootout.alioth.debian.org/u32/benchmark.php?test=all〈=pyt...
>
> So please re-write those programs to remove problems created by
> automatic translation and better take advantage of Python 3
> functionality...
>
> http://shootout.alioth.debian.org/u32/faq.php#play
>
> > It shows some "performance bugs" of Python3 itself (especially
> > regarding the binary-trees benchmark, that was unexpected by me), and
> > two points where 2to3 may be improved, for example after the
> > translation this gives error:
> >          table=string.maketrans('ACBDGHK\nMNSRUTWVYacbdghkmnsrutwvy',
> >                                 'TGVHCDM
> > \nKNSYAAWBRTGVHCDMKNSYAAWBR')):
>
> > Gives:
> > TypeError: maketrans arguments must be bytes objects
>
> > Bye,
> > bearophile
>
>
BTW I am not sure how to submit this or if this is actually valid to
do, but I have a faster version for the pidigits program that uses
basically the same algorithm but removes function calls and unused
terms of the formula.


import time

def pi_digits(n, width):
out = []
wrt = out.append
aq = 1
ar = 0
at = 1
k = 0
f = 1
g = 2
i = 0
while i < n:
y = (aq*3+ar)//at
while y != ((aq*4+ar)//at):
k += 1
f += 2
g += 4
ar = aq*g+ar*f
aq = aq*k
at = at*f
y = (aq*3+ar)//at
aq = 10*aq
ar = 10*ar-10*y*at
i += 1
wrt(str(y))
if not i%width:
wrt('\t:%d\n'%i)
wrt(' '*(width-i%width))
wrt('\t:%d\n'%i)
return ''.join(out)


def main():
begin = time.time()
n = 1000
width = 70
print pi_digits(n,width)
print 'Total Time:', time.time()-begin

main()


--
http://mail.python.org/mailman/listinfo/python-list


Re: 2to3 used in the Shootout

2008-12-23 Thread Isaac Gouy
On Dec 23, 11:51 am, bearophileh...@lycos.com wrote:
> They have translated the Python benchmarks of the Shootout site from
> Py2 to Py3 using 2to3:
>
> http://shootout.alioth.debian.org/u32/benchmark.php?test=all〈=pyt...


So please re-write those programs to remove problems created by
automatic translation and better take advantage of Python 3
functionality...


http://shootout.alioth.debian.org/u32/faq.php#play



> It shows some "performance bugs" of Python3 itself (especially
> regarding the binary-trees benchmark, that was unexpected by me), and
> two points where 2to3 may be improved, for example after the
> translation this gives error:
>          table=string.maketrans('ACBDGHK\nMNSRUTWVYacbdghkmnsrutwvy',
>                                 'TGVHCDM
> \nKNSYAAWBRTGVHCDMKNSYAAWBR')):
>
> Gives:
> TypeError: maketrans arguments must be bytes objects
>
> Bye,
> bearophile

--
http://mail.python.org/mailman/listinfo/python-list


Re: 2to3 used in the Shootout

2008-12-23 Thread Terry Reedy

bearophileh...@lycos.com wrote:

They have translated the Python benchmarks of the Shootout site from
Py2 to Py3 using 2to3:

http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=python3

It shows some "performance bugs" of Python3 itself (especially
regarding the binary-trees benchmark, that was unexpected by me), and
two points where 2to3 may be improved, for example after the
translation this gives error:
 table=string.maketrans('ACBDGHK\nMNSRUTWVYacbdghkmnsrutwvy',
'TGVHCDM
\nKNSYAAWBRTGVHCDMKNSYAAWBR')):

Gives:
TypeError: maketrans arguments must be bytes objects


Perhaps you could file a tracker item.

--
http://mail.python.org/mailman/listinfo/python-list


2to3 used in the Shootout

2008-12-23 Thread bearophileHUGS
They have translated the Python benchmarks of the Shootout site from
Py2 to Py3 using 2to3:

http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=python3

It shows some "performance bugs" of Python3 itself (especially
regarding the binary-trees benchmark, that was unexpected by me), and
two points where 2to3 may be improved, for example after the
translation this gives error:
 table=string.maketrans('ACBDGHK\nMNSRUTWVYacbdghkmnsrutwvy',
'TGVHCDM
\nKNSYAAWBRTGVHCDMKNSYAAWBR')):

Gives:
TypeError: maketrans arguments must be bytes objects

Bye,
bearophile
--
http://mail.python.org/mailman/listinfo/python-list