Hi Soroosh,
Early this year I implemented Fincke-Pohst in C++ and wrapped it in Cython. I have just pushed the result to my psage repository on github.
https://github.com/martinra/psage/tree/shortvectorenum. You will then find the implementation in psage/lattice. The whole thing is intended for an ongoing project, so I have built in caching facilities, which you find in the folder precomputed_short_vectors. I attached the "specification" of the file format, which, I guess, is currently not included in the file.
The whole thing is quite extensively tested (using nosetest). When reading the code, be aware that the there is a C++ implementation (which I also use for a standalone program running on clusters). On top of this, there is a python wrapper, written in C++. On top of this, there is a Cython wrapper. I guess it would be best to move the Cython wrapper into the C++ file (templates and qualifiers in Cython are painful), but I haven't yet taken my time to do this.
The implementation is still slower than Magma's, but actually not too much. Since it used interval arithmetics, it will give provably correct results (up to potential bugs) - contrasting PARI, who have decided to compute at least all short vectors for given length, but possibly more.
Btw: As soon as we have a git development workflow, I will consider integrating this into Sage.
Martin
short vectors file:
File header:
(unsighed int64) rank of lattice, which we denote by N
(signed int64[N][N]) the entries of the lattice, where the necessary
symmetries must hold
(unsigned int64) number of entries in the header
(unsigned int64) NULL; For future use as pointer to continued header
header entry:
(unsigned int64) lenght of vectors
(unsigned int64) number of vectors
(unsigned int64) position of corresponding data in file
File body consists of vector data.
Vector data is a list of vectors, the number of which
is determined by the header.
Vector:
(signed int64[N]) Entries of vectors.
Vectors are stored up to multiplication by -1.