linbox

ImageFields are fields which are targets of a ring homomorphism from a source ring. More...
#include <imagefield.h>
Inherits Target.
Public Member Functions  
Elt &  smul (Elt &y, const SrcElt &a, const Elt &x) 
y <– a*x  
Elt &  smulin (Elt &x, const SrcElt &a) 
x <– a*x  
Elt &  saxpy (Elt &z, const SrcElt &a, const Elt &x, const Elt &y) 
z <– a*x + y  
Elt &  saxpyin (Elt &y, const SrcElt &a, const Elt &x) 
y <– a*x + y  
ImageFields are fields which are targets of a ring homomorphism from a source ring.
Usually the source ring is ZZ or another field. The ImageField can be viewed as a module over the source ring. Hence we could think of the source as the scalar domain. Thus a mul of a source element times a image element can be thought of as a scalar multiplication and we call the op smul(). Often this can be done faster than taking the image of the scalar and multiplying in the image field.
ImageFields provide smul() and saxpy() as well as the image() and preimage() maps of the homomorphism.
The generic default is to build the ImageField functions directly from a Hom object, but the intention is to provide efficient specializations for specific cases.
Issues abound. How do we convey that the scalars are small so a implementation of a modular image can be efficient in that case?