On Mon, Apr 26, 2010 at 9:55 PM, William Stein <wst...@gmail.com> wrote:

> On Mon, Apr 26, 2010 at 1:08 AM, Sergey Bochkanov
> <sergey.bochka...@alglib.net> wrote:
> > Hello, Case.
> >
> > You wrote 23 апреля 2010 г., 19:30:20:
> >
> >> (1) Python numeric values are assumed to be immutable. If not, they
> >> cannot be used as dictionary keys. This forces all results to be new
> >> objects, hence source/destination operands cannot overlap, etc.
> >
> > It  is  problem  only when you want mpz/mpq to be value type. However,
> > they can be reference types too.
> >
> > I  know  that  it may be considered non-Pythonic, but such approach is
> > much  more  efficient.  And  I think that output from high performance
> > library like GPM/MPIR will very rarely be used as dictionary key.
> >
> > What do you think about such data model - reference mpz/mpq types?
>
> +1
>
> Sage contains a Cython-based wrapper for GMP/MPIR, which has nothing
> to do with GMPY (i.e., it is separate code).  The lack of support for
> mutable operations in GMPY is a drawback for it is a library, since
> nobody uses MPIR unless they seriously care about speed.
>
> In Sage we do not have any explicit methods that mutate integers.  We
> do have two underscore methods, though, _iadd_ and _imul_, which
> mutate self, since it is necessary to have such things to write really
> fast code, though of course one must be very careful when using them:
>
> sage: a = 2010
> sage: a._imul_(19)
> sage: a
> 38190
>
> I noticed that in Sage these are sadly undocumented, so opened a
> ticket: http://trac.sagemath.org/sage_trac/ticket/8766
>

This is odd. From their names one would expect them to be used in __imul__
and __iadd__ somewhere in the hierarchy, just like _repr_ is used in
__repr__, so that they will be used for:

sage: a = 1
sage: a*=5

as documented here: http://docs.python.org/reference/datamodel.html.
However, this is not the case. It may be a bug (or yet to be implemented
feature).


>
>
> >> (2)  .....  Anytime  you accept a Python integer, you either need to
> >> just  convert  it  to  an  mpz or test if it will fit in the _si/_ui
> >> range  and  call  the  appropriate  function.  (GMPY  uses the later
> >> approach.)
> >
> > Very  serious  problem.  And  what should we do if we have Python-long
> > which doesn't fit into 32 bits?
> >
> > We  can't  transparently  convert  it  into  the  mpz and call another
> > function   because:  a)  it  is  hard  to  implement  such  semantics,
> > especially   within   automatic  code  generation  framework,  and  b)
> > sometimes  xxx_ui functions have slight differences from their mpz/mpq
> > counterparts.
> >
> > I  think that the only thing possible is to raise an exception in such
> > cases. But it may be non-Pythonic too...
>
> In Sage we (=mostly Gonzalo Tornaria) spent an enormous amount of time
> writing two very efficient C functions, one to convert from mpz to
> Python ints, and one to convert back.   Yes, writing this code is a
> lot of work.  But no, the resulting code is not slow.  Just because
> something is hard doesn't mean "we can't do it".
> If you want this code, I bet Gonzalo would be OK with letting you have
> it under another license (it's GPL v2+ right now); it's not long, just
> tricky to write.
>
> >
> >> (3) It wasn't any faster. :(
> >
> > What  kind of tests you made? Have you tested it with relatively small
> > integers (up to 128 bits) or with really large ones?
>
> GMP/MPIR blow native python ints out of the water for asymptotically
> large input.    Already with 4 words the difference starts to get
> noticeable.
>
> >
> > I think that low speed may be caused mostly by creation of new objects
> > after  each  operation  (1)  and  (to  a  lesser extent) by conversion
> > penalty  (2).
>
> Yes.
>
> >  However,  when  you  work  with  really  large  numbers
> > (thousands  of  bits)  MPIR should be significantly faster than Python
> > native   implementation  of  long.  I've  found  mpmath  benchmark  at
> > http://mpmath.googlecode.com/svn/bench/mpbench.html   which   confirms
> > this opinion.
>
> +1
>
> >
> >
> >
> > --
> > With best regards,
> >  Sergey                          mailto:sergey.bochka...@alglib.net
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> "mpir-devel" group.
> > To post to this group, send email to mpir-de...@googlegroups.com.
> > To unsubscribe from this group, send email to
> mpir-devel+unsubscr...@googlegroups.com<mpir-devel%2bunsubscr...@googlegroups.com>
> .
> > For more options, visit this group at
> http://groups.google.com/group/mpir-devel?hl=en.
> >
> >
>
>
>
> --
> William Stein
> Professor of Mathematics
> University of Washington
> http://wstein.org
>
> --
> To post to this group, send an email to sage-devel@googlegroups.com
> To unsubscribe from this group, send an email to
> sage-devel+unsubscr...@googlegroups.com<sage-devel%2bunsubscr...@googlegroups.com>
> For more options, visit this group at
> http://groups.google.com/group/sage-devel
> URL: http://www.sagemath.org
>



-- 
Tim Joseph Dumol <tim (at) timdumol (dot) com>
http://timdumol.com

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to