[SnapPea-planning] priorities
Nathan Dunfield
nmd at illinois.edu
Mon Apr 27 17:33:22 EDT 2009
Nathaniel,
Some comments on your list.
> 1. finish tcl port (cross-platform graphics; test for mac osx & linux
> compatibility)
It seems to me that you should really test for Windows compatibility
as well if you're going with TCL approach (instead of Cocoa/GNUStep or
QT or...). Windows has become more common as a default platform in
math departments, at least in the States. Using Windows in a virtual
machine (e.g. VMWare) is pretty painless, really.
Also, I assume by the "tcl port" you mean Jeff's SnapPea 3.0b which
used Python with TCL's windowing system "Tk". Of course, one
requirement for the above is that the Python interface be finished;
it's mostly done but there are some functions that aren't wrapped.
Marc and I are planning on finish that up over the summer. (Writing
the wrappers is trivial in Cython, though so you could just add them
as you go if necessary).
As Marc mentioned, he has written a Tk link editor (which is
excellent), a Dirichlet domain viewer (using OpenGL, so it should work
with any interface) as well as a preliminary horoball viewer.
However, there are no other GUI elements, so it's not as far along as
perhaps Marc's message seems to indicate. (I would have given it at
most one "O" ;-) Certainly, it could be a starting point for
Nathaniel's project.
Also, Marc has been working on some preliminary packaging of SnapPy
using Python's distutils, and we're looking into options for making a
"clickable" app under OS X.
(Dylan: I think this answers your question as to the status of the
Python interface, but if not I can clarify further.)
> 2. sage interface
This is no different that the Python interface, and I've already added
in the Sage specific features, mostly using GAP or Magma to do a
better job finding finite covers. Making it a Sage optional package
should be trivial once Marc gets the distutils things working. One
could consider getting it included as a default part of Sage, but this
would require putting in a lot of unittests and documentation (they
have pretty high standards). This would, of course be a good thing
in and of itself, though perhaps time consuming. At the end of this
message is the docstring for the cover method, which gives some idea
of the Sage interaction.
> O rewrite snap in sage [Nathan Dunfield]
> (Nathan has written a 'proof of concept' script, and has some plans
> for continuing.)
This is correct except of the "plans for continuing" bit.
Regardless, I'm excited to here that the Simons Institute is likely to
fund work on SnapPea.
Best,
Nathan
Sage and SnapPy play well together:
sage: import SnapPy
sage: M = SnapPy.Manifold("m004")
sage: M.cover?
Type: builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form: <built-in method cover of SnapPy.SnapPy.Manifold object
at 0x8044fb8>
Namespace: Interactive
Docstring:
Returns a Manifold representing the finite cover
specified by a transitive permutation representation. The
representation is specified by a list of permutations,
one for
each generator of the simplified presentation of the
fundamental group. Each permutation is specified as a
list P
such that set(P) == set(range(d)) where d is the degree
of the
cover.
If within SAGE the permutations can also be of type
PermutationGroupElement, in which case they act on the set
range(1, d + 1). Or, you can specify a GAP or MAGMA
subgroup
of the fundamental group. Some examples:
sage: M = SnapPy.Manifold("m004")
# The basic method
sage: N0 = M.cover([[1, 3, 0, 4, 2], [0, 2, 1, 4, 3]])
# From a Gap subgroup
sage: G = gap(M.fundamental_group())
sage: H = G.LowIndexSubgroupsFpGroup(5)[9]
sage: N1 = M.cover(H)
sage: N0 == N1
True
# Or a homomorphism to a permutation group
sage: f = G.GQuotients(PSL(2,7))[1]
sage: N2 = M.cover(f)
sage: N2.volume()/M.volume()
7.9999999999999947
# Or maybe we want larger cover coming from the kernel of
this.
sage: N3 = M.cover(f.Kernel())
sage: N3.volume()/M.volume()
167.99999999999858
# Check the homology against what Gap computes directly
sage: N3.homology().Betti_number()
32
sage: len([ x for x in
f.Kernel().AbelianInvariants().sage() if x == 0])
32
# We can do the same for Magma
sage: Q, f = G.pQuotient(5, 1, nvals = 2)
sage: M.cover(f.Kernel()).volume()
sage: h = G.SimpleQuotients(1, 11, 2, 10^4)[1,1]
sage: N4 = M.cover(h)
sage: N2 == N4
True
sage: M.all_covers?
Type: builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form: <built-in method all_covers of SnapPy.SnapPy.Manifold
object at 0x8044fb8>
Namespace: Interactive
Docstring:
Returns a list of Manifolds corresponding to all of the
finite covers of the given degree.
WARNING: If the degree is large this might take a very,
very,
very long time.
If you are using SAGE, you can use GAP to find the
subgroups,
which is often much faster, by specifying the optional
argument
method = "gap"
If you have Magma installed, you can used it to do the
heavy
lifting by specifying method = "magma".
Class Docstring:
<attribute '__doc__' of 'builtin_function_or_method' objects>
More information about the SnapPea-planning
mailing list