Implementation

The &linboxing; package consists three parts. The first part is written in &GAP;, and this consists of test routines and wrappers for functions in the &linboxing; kernel module. The second part is the kernel module's interface to &GAP;, which is written in C. This handles the interface between &GAP; and the third part, which is the C++ code which calls functions in the LinBox library.

In the C++ part of the kernel module, the &GAP; objects such as vectors, matrices and their elements are converted into the corresponding LinBox data types. The requested LinBox function is then called, and the result converted back onto &GAP; objects.

Currently, all &GAP; matrices are converted into dense matrices in the LinBox library. LinBox provides good support for sparse matrices, but at present there is no standard way in &GAP; to represent sparse matrices. There are plans to overhaul matrix objects in &GAP;, and once sparse matrix objects are provided in &GAP;, these should be converted into LinBox sparse matrices.

For more details of the implementation, please refer to the source code documentation. The C and C++ source code can be found in the src directory of the &linboxing; package, and contains comments which can be converted into HTML documentation using doxygen (which must therefore be available on your system). Create this documentation using the following command: cd src doxygen Doxyfile Point your web browser at src/html/index.html to browse the documentation.