<!-- 
  LINBOXING - internal.xml.in
  Internal function documentation template file for linboxing
  Paul Smith

  Copyright (C)  2007-2008
  Paul Smith
  National University of Ireland Galway

  This file is part of the linboxing GAP package. 
  
  The linboxing package is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by the 
  Free Software Foundation; either version 2 of the License, or (at your 
  option) any later version.
  
  The linboxing package is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
  more details.
  
  You should have received a copy of the GNU General Public License along with 
  this program.  If not, see <http://www.gnu.org/licenses/>.
  
  $Id: internal.xml.in 90 2008-01-29 15:10:15Z pas $
-->
<!-- ********************************************************** -->

<Chapter>
  <Heading>Internal Function Reference</Heading>

  These are functions that are used internally in the &linboxing; package.
  They should not be needed by users of the package, but may be useful to 
  developers and are provided for completeness
  
  <Section>
  <Heading>Kernel Module Functions</Heading>
  
  These functions are implemented directly in C or C++ in the kernel module.

  <ManSection>
  <Func Name="LinBox.DETERMINANT" Arg="M, field-id"/>
  <Description>
  Kernel module function to calculate the determinant of a matrix. 
  Called by the wrapper <Ref Func="LinBox.DeterminantMat"/>.
  The <A>field-id</A> parameter should be 0 for a matrix of integers, 
  or the size of the field if the matrix is over a finite field.
  </Description>
  </ManSection>

  <ManSection>
  <Func Name="LinBox.RANK" Arg="M, field-id"/>
  <Description>
  Kernel module function to calculate the rank of a matrix. 
  Called by the wrapper <Ref Func="LinBox.RankMat"/>.
  The <A>field-id</A> parameter should be 0 for a matrix of integers, 
  or the size of the field if the matrix is over a finite field.
  </Description>
  </ManSection>

  <ManSection>
  <Func Name="LinBox.TRACE" Arg="M, field-id"/>
  <Description>
  Kernel module function to calculate the determinant of a matrix. 
  Called by the wrapper <Ref Func="LinBox.TraceMat"/>.
  The <A>field-id</A> parameter should be 0 for a matrix of integers, 
  or the size of the field if the matrix is over a finite field.
  </Description>
  </ManSection>

  <ManSection>
  <Func Name="LinBox.SOLVE" Arg="M, b, field-id"/>
  <Description>
  Kernel module function to calculate the solution of a matrix. 
  Called by the wrapper <Ref Func="LinBox.SolutionMat"/>.
  The <A>field-id</A> parameter should be 0 when the matrix and vector contains
  integers, or the size of the field if the matrix and vector are over a finite 
  field (which must naturally be the same for both).
  </Description>
  </ManSection>

  <ManSection>
  <Func Name="LinBox.TEST_INT_CONVERSION_INTERNAL" Arg="z"/>
  <Description>
  Tests the GAP-LinBox and LinBox-GAP integer conversion. Returns the integer 
  <A>z</A> (which may be large) after it has been converted into LinBox format
  and then back. 
  </Description>
  </ManSection>

  <ManSection>
  <Func Name="LinBox.TEST_VECTOR_CONVERSION_INTERNAL" Arg="v, field-id"/>
  <Description>
  Tests the GAP-LinBox and LinBox-GAP vector conversion. Returns the vector 
  <A>v</A> after it has been converted into LinBox format
  and then back. 
  The <A>field-id</A> parameter should be 0 for a vector of integers, 
  or the size of the field if the vector is over a finite field.
  This function is called by <Ref Func="LinBox.TEST_VECTOR_CONVERSION"/>.
  </Description>
  </ManSection>

  <ManSection>
  <Func Name="LinBox.TEST_MATRIX_CONVERSION_INTERNAL" Arg="M, field-id"/>
  <Description>
  Tests the GAP-LinBox and LinBox-GAP matrix conversion. Returns the matrix
  <A>v</A> after it has been converted into LinBox format
  and then back. 
  The <A>field-id</A> parameter should be 0 for a matrix of integers, 
  or the size of the field if the matrix is over a finite field.
  This function is called by <Ref Func="LinBox.TEST_MATRIX_CONVERSION"/>.
  </Description>
  </ManSection>

  <ManSection>
  <Func Name="LinBox.MAX_GAP_SMALL_INT" Arg=""/>
  <Description>
  Kernel module function which returns the size of the largest integer that 
  the &linboxing; kernel module thinks can be represented as a &GAP; small 
  integer. This number is different on 32- or 64-bit machines, but &linboxing;
  tries to check with &GAP; when it compiles to find out which value to use.
  </Description>
  </ManSection>
  <Example><![CDATA[
  gap> z := LinBox.MAX_GAP_SMALL_INT();
  1152921504606846975
  gap> IsSmallIntRep(z);
  true
  gap> IsSmallIntRep(z+1);
  ]]></Example>

  <!-- GAPDocSourceSuffix="_manInt" -->
  </Section>

 
</Chapter>

