LatNet Builder Manual
2.0.1-11
Software Package for Constructing Highly Uniform Point Sets
|
This class is a skeleton for the implementation of different types of lattices of arbitrary rank. More...
#include <IntLattice.h>
Inherits LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >.
Inherited by LatticeTester::Rank1Lattice< Int, BasInt, Dbl, RedDbl >.
Public Member Functions | |
IntLattice (Int modulo, int k, int maxDim, NormType norm=L2NORM) | |
Constructor initializing the primal and the dual basis with the identity matrix. More... | |
IntLattice (const IntLattice< Int, BasInt, Dbl, RedDbl > &Lat) | |
Copy constructor that makes a copy of Lat . More... | |
void | copy (const IntLattice< Int, BasInt, Dbl, RedDbl > &lattice) |
Copies lattice into this object. More... | |
virtual | ~IntLattice () |
Destructor. | |
void | init () |
Allocates space to vectors used internally. More... | |
int | getOrder () const |
This is the order of the underlying MRG. More... | |
virtual void | incDim () |
Increments the dimension of the basis and dual basis vectors by one. More... | |
void | calcLgVolDual2 (double lgm2) |
Computes the logarithm of the normalization factor (m_lgVolDual2 ) in all dimensions \(\leq\) MaxDim for the lattice. More... | |
double | getLgVolDual2 (int i) const |
Gives the log of m^(2*i) if i < order, else gives the log of m^(2*i) | |
void | dualize () |
Exchange the primal basis and the dual basis. | |
void | fixLatticeNormalization (bool dualF) |
This function is called to fix the normalization constants to get the normalized merit from the shortest distance in the lattice. More... | |
void | buildProjection (IntLattice< Int, BasInt, Dbl, RedDbl > *lattice, const Coordinates &proj) |
Builds the basis (and dual basis) of the projection proj for this lattice. More... | |
virtual void | buildBasis (int d) |
Builds the basis for the lattice in dimension d . More... | |
LatticeTester::Normalizer< RedDbl > * | getNormalizer (NormaType norma, int alpha, bool dualF) |
Creates and returns the normalizer corresponding to criterion norma . More... | |
virtual void | setLac (const Lacunary< BasInt > &) |
Does nothing is this base class. | |
virtual std::string | toStringCoef () const |
Returns the vector of multipliers (or coefficients) \(A\) as a string. | |
Public Member Functions inherited from LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl > | |
IntLatticeBasis (const int dim, NormType norm=L2NORM) | |
Constructor initializing the primal basis with the identity matrix. More... | |
IntLatticeBasis (const BasIntMat basis, const int dim, NormType norm=L2NORM) | |
Constructor taking all three needed component of an IntLatticeBasis. More... | |
IntLatticeBasis (const BasIntMat primalbasis, const BasIntMat dualbasis, const Int modulo, const int dim, NormType norm=L2NORM) | |
Complete constructor. More... | |
IntLatticeBasis (const IntLatticeBasis< Int, BasInt, Dbl, RedDbl > &Lat) | |
Copy constructor. More... | |
~IntLatticeBasis () | |
Destructor. | |
void | kill () |
Cleans and releases all the memory allocated to this lattice. | |
void | copyBasis (const IntLatticeBasis< Int, BasInt, Dbl, RedDbl > &lat) |
Copy the lattice lat , except it's NormType and dimension, into this object. More... | |
void | copyBasis (const IntLatticeBasis< Int, BasInt, Dbl, RedDbl > &lat, int n) |
Copy the n first elements of the basis of the lattice lat into this object. More... | |
void | initVecNorm () |
Initializes a vector containing the norms of the basis vectors to -1 at all components. | |
BasIntMat & | getBasis () |
Returns the basis represented in a matrix. | |
BasIntMat & | getDualBasis () |
Returns the dual basis represented in a matrix. | |
int | getDim () const |
Returns the dimension of the lattice. More... | |
NormType | getNorm () const |
Returns the NormType used by this lattice. | |
Dbl | getVecNorm (const int &i) |
Returns the norm of the i-th vector of the basis. | |
DblVec | getVecNorm () const |
Returns the norm of each vector of the basis in a vector. | |
Dbl | getDualVecNorm (const int &i) |
Returns the norm of the i-th vector of the dual basis. | |
DblVec | getDualVecNorm () const |
Returns the norm of each vector of the dual basis in a vector. | |
Int | getModulo () const |
Returns the m used for rescaling if it has been defined. More... | |
void | setDim (const int &d) |
Sets the dimension of the basis to d . More... | |
void | setNorm (const NormType &norm) |
Sets the NormType used by this lattice to norm . | |
void | setVecNorm (const Dbl &value, const int &i) |
Sets the norm of the i -th component of the basis to value . More... | |
void | setDualVecNorm (const Dbl &value, const int &i) |
Sets the norm of the i -th component of the dual basis to value . More... | |
bool | withDual () |
Returns true if a dual has been defined and false otherwise. | |
void | setDualFlag (bool flag) |
Sets the withDual flag to flag . More... | |
bool | getXX (int i) const |
Gets whether or not there is a component at the i -th position in the basis. More... | |
void | setXX (bool val, int i) |
Sets value at the i -th position in the array xx. | |
void | setNegativeNorm () |
Sets all the values in the array containing the norms of the basis vectors to -1. | |
void | setNegativeNorm (const int &i) |
Sets the value of the i -th component in the array containing the norms of the basis vectors to -1. | |
void | setDualNegativeNorm () |
Sets all the values in the array containing the norms of the dual basis vectors to -1. | |
void | setDualNegativeNorm (const int &i) |
Sets the value of the i -th component in the array containing the norms of the dual basis vectors to -1. | |
void | updateVecNorm () |
Updates the array containing the basis vectors norms by recomputing them. | |
void | updateVecNorm (const int &d) |
Updates the array containing the basis vectors norms from the d -th component to the last by recomputing them. | |
void | updateDualVecNorm () |
Updates the array containing the dual basis vectors norms by recomputing them. | |
void | updateDualVecNorm (const int &d) |
Updates the array containing the dual basis vectors norms from the d -th component to the last by recomputing them. | |
void | updateScalL2Norm (const int i) |
Updates the i -th value of the array containing the norms of the basis vectors by recomputing it using the L2NORM . | |
void | updateScalL2Norm (const int k1, const int k2) |
Updates the k1 -th to the k2-1 -th values of the array containing the norms of the basis vectors by recomputing them using the L2NORM . | |
void | updateDualScalL2Norm (const int i) |
Updates the i -th value of the array containing the norms of the dual basis vectors by recomputing it using the L2NORM . | |
void | updateDualScalL2Norm (const int k1, const int k2) |
Updates the k1 -th to the k2-1 -th values of the array containing the norms of the dual basis vectors by recomputing them using the L2NORM . | |
void | permute (int i, int j) |
Exchanges vectors i and j in the basis. More... | |
bool | checkDuality () |
Returns true if the dual basis contained in the object really is the dual of the basis, and false otherwise. More... | |
void | sort (int d) |
Sorts the basis vectors with indices greater of equal to \(d\) by increasing length. More... | |
std::string | toStringBasis () const |
Returns a string with the primal basis and its norms. | |
std::string | toStringDualBasis () const |
Returns a string with the dual basis and its norms. | |
void | write () const |
Writes the lattice and its parameters on standard output. More... | |
Protected Member Functions | |
virtual void | kill () |
The components of the lattice when it is built out of more than one component. More... | |
Protected Attributes | |
int | m_order |
The order of the basis. | |
double * | m_lgVolDual2 |
Represente sur dual along the diagonal?? ERWAN. | |
double | m_lgm2 |
The logarithm \(\log_2 (m^2)\). | |
BasIntMat | m_wSI |
Use to save the dual basis and the basis in some works. | |
BasIntMat | m_vSI |
Int | m_t1 |
Working Variables use in MRGLattice.h. | |
Int | m_t2 |
Int | m_t3 |
Protected Attributes inherited from LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl > | |
BasIntMat | m_basis |
Each row of this matrix represents a vector in the basis of the lattice. | |
BasIntMat | m_dualbasis |
Each row of this matrix represents a vector in the dual basis of the lattice. | |
int | m_dim |
The dimension of the lattice. More... | |
NormType | m_norm |
The NormType used in the reduction and for this lattice. | |
DblVec | m_vecNorm |
The norm of each vector in the basis. | |
DblVec | m_dualvecNorm |
The norm of each vector in the dual basis. | |
Int | m_modulo |
The m used for rescaling the lattice. | |
bool | m_withDual |
If m_withDual is true a dual basis has been specified, otherwise it is false . | |
bool * | m_xx |
This table is used in the Minkowski reduction, but it's usage is quite obscure. | |
This class is a skeleton for the implementation of different types of lattices of arbitrary rank.
This class contains a method to compute lattices of projections of \(\{x_i\}_{ 0 \leq i}\), a method to exchange the basis and the dual basis, and a virtual method that can be implemented in subclasses to recompute the basis for different dimensions.
A lattice of rank \(k\) with integer vectors modulo \(m\) contains \(m^k\) distinct vectors. This number, the density, can then be used to compute bounds on the spectral test. This class implements methods to compute \( \log_2(m^{2i}) \) for \( 1 \leq i \leq k \) to help with the computation of such bounds.
LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::IntLattice | ( | Int | modulo, |
int | k, | ||
int | maxDim, | ||
NormType | norm = L2NORM |
||
) |
Constructor initializing the primal and the dual basis with the identity matrix.
The dimension of the lattice is set to maxDim
and the norm used for reduction to norm
.
modulo | The modulo of the integer coordinates |
k | The rank of the lattice to be constructed |
maxDim | The maximal dimension for which this lattice can be expanded/tested (?) |
norm | The norm to use in for reduction |
References LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::init(), LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::m_dim, LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::m_dualbasis, LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::m_dualvecNorm, LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::m_modulo, LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::m_order, LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::m_withDual, NTL::vector< T >::resize(), NTL::matrix< T >::resize(), and LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::setDualNegativeNorm().
LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::IntLattice | ( | const IntLattice< Int, BasInt, Dbl, RedDbl > & | Lat | ) |
Copy constructor that makes a copy of Lat
.
The maximal dimension of the created basis is set equal to Lat
’s current dimension.
References LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::init(), LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::m_order, LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::m_withDual, LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::m_wSI, and LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::setDualNegativeNorm().
|
virtual |
Builds the basis for the lattice in dimension d
.
This fonction is implemented in subclasses
Reimplemented in LatticeTester::Rank1Lattice< Int, BasInt, Dbl, RedDbl >.
References LatticeTester::MyExit().
void LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::buildProjection | ( | IntLattice< Int, BasInt, Dbl, RedDbl > * | lattice, |
const Coordinates & | proj | ||
) |
Builds the basis (and dual basis) of the projection proj
for this lattice.
The result is placed in the lattice
lattice. The basis is triangularized to form a proper basis.
References LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::m_basis, LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::m_dualbasis, LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::m_order, LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::setDim(), LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::setDualNegativeNorm(), and LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::setNegativeNorm().
void LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::calcLgVolDual2 | ( | double | lgm2 | ) |
Computes the logarithm of the normalization factor (m_lgVolDual2
) in all dimensions \(\leq\) MaxDim
for the lattice.
lgm2
is the logarithm in base 2 of \(m^2\).
void LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::copy | ( | const IntLattice< Int, BasInt, Dbl, RedDbl > & | lattice | ) |
Copies lattice
into this object.
This should be equivalent to the creation of a new IntLattice using the copy constructor with lattice
as an argument.
References LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::getDim(), LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::getOrder(), LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::getXX(), LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::m_basis, LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::m_dualbasis, and LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::m_modulo.
void LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::fixLatticeNormalization | ( | bool | dualF | ) |
This function is called to fix the normalization constants to get the normalized merit from the shortest distance in the lattice.
If dualF
is true
, the normalization constant is reset for the dual lattice, otherwise it is reset for the primal lattice.
Normalizer< RedDbl > * LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::getNormalizer | ( | NormaType | norma, |
int | alpha, | ||
bool | dualF | ||
) |
Creates and returns the normalizer corresponding to criterion norma
.
In the case of the \(P_{\alpha}\) test, the argument alpha
= \(\alpha\). In all other cases, it is unused.
|
inline |
This is the order of the underlying MRG.
The problem is that the lattice is not necessarily associated with a MRG anymore. The solution probably is to change this so that it is now the rank because a MRG of order k spans a lattice of rank k. (See the lattice construction in Pierre's book)
References LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::m_order.
Referenced by LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::copy().
|
virtual |
Increments the dimension of the basis and dual basis vectors by one.
This initializes the added components to 0
and does not compute the value taken by the added components and vector. It also resets vectors containing the norms. The implementation in this class is meant to be overriden by subclasses and probably should not be used.
Reimplemented in LatticeTester::Rank1Lattice< Int, BasInt, Dbl, RedDbl >.
References LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::m_basis, LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::m_dualbasis, LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::m_dualvecNorm, and LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::m_vecNorm.
void LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::init | ( | ) |
Allocates space to vectors used internally.
This should probably be private or protected because it should not be needed to call it directly (the constructors and copy already call it.
References NTL::conv(), LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::initVecNorm(), and LatticeTester::Lg().
Referenced by LatticeTester::Rank1Lattice< Int, BasInt, Dbl, RedDbl >::init(), and LatticeTester::IntLattice< Int, BasInt, Dbl, RedDbl >::IntLattice().
|
protectedvirtual |
The components of the lattice when it is built out of more than one component.
When there is only one component, it is unused as the parameters are the same as above. Cleans and releases all the memory allocated to this lattice.
References LatticeTester::IntLatticeBasis< Int, BasInt, Dbl, RedDbl >::kill().