Hi Christian!

On Sun, Sep 19, 2010 at 05:16:11PM -0700, Christian Stump wrote:
> after Sebastian's explanations how to push things to the combinat
> queue (thanks again), I pushed a first version of the universal
> cyclotomic field. If anyone has some time, it would be nice to get
> some feedback what runs smoothly and where is still work to be done...
> 
> You get the universal cyclotomic field with UCF and any root of unity
> by E(n) or E(n,k) for E(n)^k. Everything else should be self-
> explaining, if it is not I should change it.

Quick summary of our discussion with the GAP developers in Aachen:

They suggested the following benchmark, which is fairly typical of the
use cases around Coxeter groups and the like:

    sage: W = gap3.ComplexReflectionGroup(14)
    sage: UC = W.UnipotentCharacters()
    sage: time M = matrix(UC.families[2].fourierMat.sage())
    CPU times: user 7.32 s, sys: 0.01 s, total: 7.33 s
    sage: time M^2
    CPU times: user 132.48 s, sys: 1.07 s, total: 133.55 s
    Wall time: 133.69 s
    54 x 54 dense matrix over Universal Cyclotomic Field endowed with the 
Zumbroich basis
    sage: M^2.is_one()
    True

The result is correct and should make for a fairly strong check :-)
The above would be a good candidate for being in the doctests
(although it depends on gap3, so it has to be #optional)

They liked it that the conversion between GAP and Sage was working at
once without any other changed. They also liked it that there is
potential for user configuration of the reducing strategies.

There is however a speed issue: the conversion from GAP to Sage and
the product are quite slow (the product takes a fraction of a second
in GAP). I ran the code under the profiler, and a lot of time is eaten
up by the caching (the usual cached_method slowness issue). One more
reason to finally take the time to optimize it! If we are lucky, this
is the only problem.

For the record, here is the example where GAP and sage differed. They
agreed it was a bug in GAP, and are upstreaming it to Saint Andrews.

    sage: E( 2^11 * 3^4 )
    -E(165888)^55297 - E(165888)^110593
    sage: gap("E( 2^11 * 3^4 )")
    -E(165888)^55297-E(165888)^45057
    sage:
    sage: E(2^10*3^7)
    -E(2239488)^1119745
    sage: gap("E(2^10*3^7)")
    -E(2239488)^5633
    sage: 110593 - 45057
    65536

Please include the above in the doctests, together with the GAP
example, and a comment about it!

Further comments:

They asked about coercions/conversions to/from standard Sage's
cyclotomic fields. If this is implemented, a couple examples in the
Sage documentation would be nice.

Breuer mentioned that the implementation of inverses in GAP was naive,
and suggested further approaches. I did not have time to write them
down while it was fresh in my mind, but one of them was about solving
an appropriate system of linear equations. Maybe you could have a
quick phone call with him.

Jean asked about a feature he finds very useful, namely the
recognition if a given element in the universal cyclotomic field is a
root of unity, and if yes which one. See AsRootOfUnity in
gap3-jm2/src/pkg/chevie/lib/cycpol.g, which uses a trick of Breuer,
which is well documented there.

Cheers,
                                Nicolas
--
Nicolas M. ThiƩry "Isil" <nthi...@users.sf.net>
http://Nicolas.Thiery.name/

-- 
You received this message because you are subscribed to the Google Groups 
"sage-combinat-devel" group.
To post to this group, send email to sage-combinat-de...@googlegroups.com.
To unsubscribe from this group, send email to 
sage-combinat-devel+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sage-combinat-devel?hl=en.

Reply via email to