2to3 used in the Shootout

Isaac Gouy igouy2 at yahoo.com
Fri Jan 2 18:28:26 CET 2009


On Dec 29 2008, 8:36 am, prueba... at latinmail.com wrote:
> On Dec 23, 5:21 pm, Isaac Gouy <igo... at yahoo.com> wrote:
>
> > On Dec 23, 11:51 am, bearophileH... at 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.
>
> <pre>
> 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()
>
> </pre>


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



More information about the Python-list mailing list