Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Message from discussion patches for the calculus code
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
William Stein  
View profile  
 More options Nov 2 2008, 3:07 pm
From: "William Stein" <wst...@gmail.com>
Date: Sun, 2 Nov 2008 12:07:38 -0800
Local: Sun, Nov 2 2008 3:07 pm
Subject: Re: [sage-devel] Re: patches for the calculus code

On Sun, Nov 2, 2008 at 11:46 AM, mabshoff <mabsh...@googlemail.com> wrote:

> On Nov 2, 11:38 am, "William Stein" <wst...@gmail.com> wrote:
>> On Sun, Nov 2, 2008 at 3:10 AM, Wilfried_Huss

> Hi,

>> <h...@finanz.math.tugraz.at> wrote:

>> > Hi,

>> > I have written some code for the Maxima interface.
>> > You can find the patches at:
>> >  http://www.math.tugraz.at/~huss/sage

>> > calculus1.patch implements the conversion from Maxima
>> > matrices to Sage matrices.

> This should come in handy, but starting with 3.2 we will finally have
> pynac available for some of the basic symbolic manipulation tasks. It
> is far from bullet proof, but it is a start, so the days of Maxima as
> the default implementation of the low level symbolic stuff is coming
> finally to an end :)

And I think we still want to have as many conversions between
Maxima and Sage as possible, even if Maxima isn't the default
backend for symbolic manipulation. It's still very good for
Maxima and Sage to be able to communicate.  The more
capabilities for communication between Sage and other systems,
the better.

>> > calculus2.patch adds symbolic gamma and factorial functions.
>> > (The factorial is named fact() so it doesn't clash with the
>> > factorial in sage.rings.arith)

> Provided the factorial bit does not interfere with the current non-
> symbolic code this could be useful.

+1

>> > Finally calculus3.patch renames the symbolic factorial to factorial(),
>> > and changes all imports of sage.rings.arith.factorial to
>> > sage.calculus.calculus.factorial. I had to keep a renamed version
>> > of the factorial function in sage.rings.arith to avoid circular
>> > imports at startup.

> I don't like this patch at all since it forces us to use a Maxima
> function even for integers which ought to be the most common use of
> factorial.

I didn't look at the patch, but just want to comment that using
sage.calculus.calculus.factorial instead of sage.rings.arith.factorial
doesn't a priori imply that Maxima is used to compute factorials.
I.e., I could imagine an implementation where GMP is still used
for this:

sage: time n = factorial(10^6)
CPU times: user 1.90 s, sys: 0.10 s, total: 2.00 s

> When the point counting code was using Maxima to compute
> ceil, floor and sqrt the code as a whole was slower by a factor of
> three which illustrates nicely why we don't want to use Maxima unless

Do you really mean "three orders of magnitude", i.e., a factor of 1000? :-)

> there is a good reason to do so. Especially considering that using
> mpfr's functions was abotu a million times faster since there is no
> pexpect overhead. I could see using that code in case the argument is
> non-integer, but not using the highly optimized gmp implementation for
> something that is many orders of magnitude slower is just not what we
> want to do.

If a ticket is posted with the third patch, the reviewer should just make
sure that factorial(n) for input an integer (1) doesn't slow down, and (2)
returns an integer.

> Cheers,

> Michael

>> > The patches are against 3.2-alpha1, after applying all 3 patches
>> > all tests passed.

>> > Here is a sample session with the new functionality:

>> > sage: var('x,y')
>> > sage: v = maxima('v: vandermonde_matrix([x, y, 1/2])')
>> > sage: v
>> > matrix([1,x,x^2],[1,y,y^2],[1,1/2,1/4])
>> > sage: type(v)
>> > <class 'sage.interfaces.maxima.MaximaElement'>
>> > sage: v.sage()

>> > [  1   x x^2]
>> > [  1   y y^2]
>> > [  1 1/2 1/4]
>> > sage: mlist = maxima('[v, sin(x), 1, v.v]').sage()
>> > sage: mlist

>> > [[  1   x x^2]
>> > [  1   y y^2]
>> > [  1 1/2 1/4],
>> >    sin(x),
>> >    1,
>> >    [       x^2 + x + 1    x*y + x^2/2 + x    x*y^2 + 5*x^2/4]
>> > [       y^2 + y + 1        3*y^2/2 + x  y^3 + y^2/4 + x^2]
>> > [               7/4      y/2 + x + 1/8 y^2/2 + x^2 + 1/16]]
>> > sage: [parent(i) for i in mlist]

>> > [Full MatrixSpace of 3 by 3 dense matrices over Symbolic Ring,
>> >    Symbolic Ring,
>> >    Symbolic Ring,
>> >    Full MatrixSpace of 3 by 3 dense matrices over Symbolic Ring]

>> > sage: gamma(x/2)(x=5)
>> > 3*sqrt(pi)/4

>> > sage: f = factorial(x + factorial(y))
>> > sage: maxima(f).sage()
>> > factorial(factorial(y) + x)

>> > sage: f(y=x)(x=3)
>> > 362880

>> > I hope it is useful.

>> > Greetings,
>> > Wilfried Huss

>> Thanks!  Could you write to Michael Abshoff (<mabsh...@googlemail.com>) and ask
>> for a trac account, then open three trac tickets, one
>> for each of the above? Thanks again!

>> William

--
William Stein
Associate Professor of Mathematics
University of Washington
http://wstein.org

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.