ergo
mat::PuriStepInfo< Treal, Tvector, TdebugPolicy > Class Template Reference

Contains information about the matrix before a purification step and about the step. More...

#include <PuriStepInfo.h>

Inheritance diagram for mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >:
mat::PuriStepInfoDebug< Treal, TdebugPolicy >

Public Member Functions

 PuriStepInfo (int nn=-1, int noc=-1, Treal eigvalConvCrit=0.0)
 
 ~PuriStepInfo ()
 
bool converged () const
 
void setChosenThresh (Treal const thr)
 
Treal getChosenThresh () const
 
void setActualThresh (Treal const thr)
 
Treal getActualThresh () const
 
void setEstimatedStepsLeft (int const stepsleft)
 
int getEstimatedStepsLeft () const
 
void setTraceX (Treal const trX)
 
void setTraceX2 (Treal const trX2)
 
Treal getTraceX () const
 
Treal getTraceX2 () const
 
void setPoly ()
 
int getPoly () const
 
void setXmX2EuclNorm (Interval< Treal > const XmX2eucl)
 Sets XmX2EuclNorm bounds. More...
 
Interval< Treal > getXmX2EuclNorm () const
 
void setEigVecPtr (Tvector *eigVecPtr_)
 Improves homo and lumo bounds if the new ones are better. More...
 
Tvector const * getEigVecPtr () const
 
void improveHomoLumo (Interval< Treal > const homoInt, Interval< Treal > const lumoInt)
 
Interval< Treal > const & getHomo () const
 
Interval< Treal > const & getLumo () const
 
Interval< Treal > const & getEigInterval () const
 
void exchangeInfoWithNext (PuriStepInfo< Treal, Tvector, TdebugPolicy > &next)
 
void setCorrectOccupation ()
 Set correct occ. More...
 
int getCorrectOccupation () const
 
Treal subspaceError () const
 
void improveEigInterval (Interval< Treal > const eInt)
 Improve eigenvalue bounds and delta if possible. More...
 
void setNnzX (size_t const nzX)
 
size_t getNnzX () const
 
void setNnzX2 (size_t const nzX2)
 
size_t getNnzX2 () const
 
void computeEigAccLoss ()
 Computes a probable upper bound of the accuracy that is lost in the eigenvalues of X * X because of limited relative precision in the storage of X. More...
 
Treal getEigAccLoss () const
 
Treal getN0 () const
 
Treal getN1 () const
 
Treal getDelta () const
 
void checkIntervals (const char *descriptionString) const
 
template<typename Tmatrix >
void computeExactValues (Tmatrix const &X, Tmatrix const &X2)
 
void setMemUsageBeforeTrunc ()
 
void setMemUsageInXmX2Diff (MemUsage::Values &memUsage)
 
void setTimeThresh (float t)
 
void setTimeSquare (float t)
 
void setTimeXmX2Norm (float t)
 
void setTimeTotal (float t)
 
void setTimeXX2Write (float t)
 
void setTimeXX2Read (float t)
 
MemUsage::Values getMemUsageBeforeTrunc ()
 
MemUsage::Values getMemUsageInXmX2Diff ()
 
float getTimeThresh ()
 
float getTimeSquare ()
 
float getTimeXmX2Norm ()
 
float getTimeTotal ()
 
float getTimeXX2Write ()
 
float getTimeXX2Read ()
 
bool homoIsAccuratelyKnown (Treal accuracyLimit) const
 
bool lumoIsAccuratelyKnown (Treal accuracyLimit) const
 
bool getLumoWasComputed ()
 
bool getHomoWasComputed ()
 
- Public Member Functions inherited from mat::PuriStepInfoDebug< Treal, TdebugPolicy >
void checkIntervals (Interval< Treal > const &eigInterval, Interval< Treal > const &homo, Interval< Treal > const &lumo, Interval< Treal > const &XmX2EuclNorm, const char *descriptionString) const
 
template<typename Tmatrix >
void computeExactValues (Tmatrix const &X, Tmatrix const &X2, int const n, int const nocc)
 

Protected Member Functions

void computen0n1 ()
 Compute n0 and n1 Called by improveEigInterval. More...
 
- Protected Member Functions inherited from mat::PuriStepInfoDebug< Treal, TdebugPolicy >
 PuriStepInfoDebug ()
 

Protected Attributes

int n
 System size. More...
 
int nocc
 Number of occupied orbitals. More...
 
Treal traceX
 Trace of the matrix X. More...
 
Treal traceX2
 Trace of the squared matrix X^2. More...
 
int poly
 Choice of polynomial 0 for x^2 and 1 for 2 * x - x^2. More...
 
Treal chosenThresh
 Chosen threshold value applied before step. More...
 
Treal actualThresh
 Actual threshold value applied before step. More...
 
int estimatedStepsLeft
 Estimated steps left in purification. More...
 
Interval< Treal > eigInterval
 Interval containing the eigenvalue spectrum. More...
 
Treal delta
 Largest possible deviation from the [0 1] interval. More...
 
int correctOccupation
 Takes the values: 1 meaning all eigenvalues supposed to go to 1 are larger than 0.5 and all eigenvalues supposed to go to 0 are smaller than 0.5 for sure. More...
 
Interval< Treal > XmX2EuclNorm
 Interval containing the euclidean norm ||X-X^2||_2 before step. More...
 
Tvector * eigVecPtr
 Eigenvector possibly containing the homo or lumo eigenvector. More...
 
bool lumoWasComputed
 Flag indicating if lumo was computed. More...
 
bool homoWasComputed
 Flag indicating if homo was computed. More...
 
Treal n0
 Lower bound on the number of eigenvalues in [lambdaMin, 0.5]. More...
 
Treal n1
 Lower bound on the number of eigenvalues in [0.5, 1 + delta]. More...
 
Interval< Treal > homo
 Interval containing the homo eigenvalue. More...
 
Interval< Treal > lumo
 Interval containing the lumo eigenvalue. More...
 
Treal eigConvCrit
 Tolerated deviation from 0 and 1 of converged eigenvalues. More...
 
size_t nnzX
 Number of nonzeros in the matrix X. More...
 
size_t nnzX2
 Number of nonzeros in the matrix X2. More...
 
Treal eigAccLoss
 A probable upper bound of the accuracy that is lost in the eigenvalues of X * X because of limited relative precision in the storage of X. More...
 
MemUsage::Values memUsageBeforeTrunc
 
MemUsage::Values memUsageInXmX2Diff
 
float timeThresh
 
float timeSquare
 
float timeXmX2Norm
 
float timeTotal
 
float timeXX2Write
 
float timeXX2Read
 

Detailed Description

template<typename Treal, typename Tvector, typename TdebugPolicy>
class mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >

Contains information about the matrix before a purification step and about the step.

All info is for the truncated matrix in the current step. We use inheritance for test class so that empty base class optimization can be used in case of an empty test class.

Constructor & Destructor Documentation

template<typename Treal, typename Tvector, typename TdebugPolicy>
mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::PuriStepInfo ( int  nn = -1,
int  noc = -1,
Treal  eigvalConvCrit = 0.0 
)
inlineexplicit
template<typename Treal, typename Tvector, typename TdebugPolicy>
mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::~PuriStepInfo ( )
inline

Member Function Documentation

template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::checkIntervals ( const char *  descriptionString) const
inline
template<typename Treal , typename Tvector , typename TdebugPolicy >
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::computeEigAccLoss ( )
template<typename Treal, typename Tvector, typename TdebugPolicy>
template<typename Tmatrix >
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::computeExactValues ( Tmatrix const &  X,
Tmatrix const &  X2 
)
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
bool mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::converged ( ) const
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getActualThresh ( ) const
inline

Referenced by mat::operator<<().

template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getChosenThresh ( ) const
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
int mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getCorrectOccupation ( ) const
inline

Referenced by mat::operator<<().

template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getDelta ( ) const
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getEigAccLoss ( ) const
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
Interval<Treal> const& mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getEigInterval ( ) const
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
Tvector const* mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getEigVecPtr ( ) const
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
int mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getEstimatedStepsLeft ( ) const
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
Interval<Treal> const& mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getHomo ( ) const
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
bool mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getHomoWasComputed ( )
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
Interval<Treal> const& mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getLumo ( ) const
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
bool mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getLumoWasComputed ( )
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
MemUsage::Values mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getMemUsageBeforeTrunc ( )
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
MemUsage::Values mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getMemUsageInXmX2Diff ( )
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getN0 ( ) const
inline

Referenced by mat::operator<<().

template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getN1 ( ) const
inline

Referenced by mat::operator<<().

template<typename Treal, typename Tvector, typename TdebugPolicy>
size_t mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getNnzX ( ) const
inline

Referenced by mat::operator<<().

template<typename Treal, typename Tvector, typename TdebugPolicy>
size_t mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getNnzX2 ( ) const
inline

Referenced by mat::operator<<().

template<typename Treal, typename Tvector, typename TdebugPolicy>
int mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getPoly ( ) const
inline

Referenced by mat::operator<<().

template<typename Treal, typename Tvector, typename TdebugPolicy>
float mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getTimeSquare ( )
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
float mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getTimeThresh ( )
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
float mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getTimeTotal ( )
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
float mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getTimeXmX2Norm ( )
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
float mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getTimeXX2Read ( )
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
float mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getTimeXX2Write ( )
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getTraceX ( ) const
inline

Referenced by mat::operator<<().

template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getTraceX2 ( ) const
inline

Referenced by mat::operator<<().

template<typename Treal, typename Tvector, typename TdebugPolicy>
Interval<Treal> mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::getXmX2EuclNorm ( ) const
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
bool mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::homoIsAccuratelyKnown ( Treal  accuracyLimit) const
inline
Parameters
accuracyLimitHOMO estimation is considered to be accurate if the error is smaller than this value.

Referenced by mat::PuriStepInfo< Treal, VectorType, TdebugPolicy >::getTimeXX2Read().

template<typename Treal, typename Tvector, typename TdebugPolicy>
bool mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::lumoIsAccuratelyKnown ( Treal  accuracyLimit) const
inline
Parameters
accuracyLimitLUMO estimation is considered to be accurate if the error is smaller than this value.

Referenced by mat::PuriStepInfo< Treal, VectorType, TdebugPolicy >::homoIsAccuratelyKnown().

template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setActualThresh ( Treal const  thr)
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setChosenThresh ( Treal const  thr)
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setCorrectOccupation ( )
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setEigVecPtr ( Tvector *  eigVecPtr_)
inline

Improves homo and lumo bounds if the new ones are better.

Uses XmX2EuclNorm if possible.

Referenced by mat::Purification< Treal, Tmatrix, TdebugPolicy >::stepComputeInfo().

template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setEstimatedStepsLeft ( int const  stepsleft)
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setMemUsageBeforeTrunc ( )
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setMemUsageInXmX2Diff ( MemUsage::Values memUsage)
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setNnzX ( size_t const  nzX)
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setNnzX2 ( size_t const  nzX2)
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setTimeSquare ( float  t)
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setTimeThresh ( float  t)
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setTimeTotal ( float  t)
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setTimeXmX2Norm ( float  t)
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setTimeXX2Read ( float  t)
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setTimeXX2Write ( float  t)
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setTraceX ( Treal const  trX)
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setTraceX2 ( Treal const  trX2)
inline
template<typename Treal, typename Tvector, typename TdebugPolicy>
void mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::setXmX2EuclNorm ( Interval< Treal > const  XmX2eucl)
inline

Member Data Documentation

template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::actualThresh
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::chosenThresh
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
int mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::correctOccupation
protected

Takes the values: 1 meaning all eigenvalues supposed to go to 1 are larger than 0.5 and all eigenvalues supposed to go to 0 are smaller than 0.5 for sure.

0 otherwise

Referenced by mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::computen0n1(), mat::PuriStepInfo< Treal, VectorType, TdebugPolicy >::getCorrectOccupation(), mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::improveHomoLumo(), and mat::PuriStepInfo< Treal, VectorType, TdebugPolicy >::setCorrectOccupation().

template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::delta
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::eigAccLoss
protected

A probable upper bound of the accuracy that is lost in the eigenvalues of X * X because of limited relative precision in the storage of X.

Referenced by mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::computeEigAccLoss(), mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::exchangeInfoWithNext(), and mat::PuriStepInfo< Treal, VectorType, TdebugPolicy >::getEigAccLoss().

template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::eigConvCrit
protected

Tolerated deviation from 0 and 1 of converged eigenvalues.

Referenced by mat::PuriStepInfo< Treal, VectorType, TdebugPolicy >::converged().

template<typename Treal, typename Tvector, typename TdebugPolicy>
Tvector* mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::eigVecPtr
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
int mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::estimatedStepsLeft
protected

Estimated steps left in purification.

Used to chose threshold. -1 indicates no estimation possible.

Referenced by mat::PuriStepInfo< Treal, VectorType, TdebugPolicy >::getEstimatedStepsLeft(), and mat::PuriStepInfo< Treal, VectorType, TdebugPolicy >::setEstimatedStepsLeft().

template<typename Treal, typename Tvector, typename TdebugPolicy>
bool mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::homoWasComputed
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
bool mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::lumoWasComputed
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
MemUsage::Values mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::memUsageBeforeTrunc
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
MemUsage::Values mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::memUsageInXmX2Diff
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
int mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::n
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::n0
protected

Lower bound on the number of eigenvalues in [lambdaMin, 0.5].

Referenced by mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::computen0n1(), and mat::PuriStepInfo< Treal, VectorType, TdebugPolicy >::getN0().

template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::n1
protected

Lower bound on the number of eigenvalues in [0.5, 1 + delta].

Referenced by mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::computen0n1(), and mat::PuriStepInfo< Treal, VectorType, TdebugPolicy >::getN1().

template<typename Treal, typename Tvector, typename TdebugPolicy>
size_t mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::nnzX
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
size_t mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::nnzX2
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
int mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::nocc
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
int mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::poly
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
float mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::timeSquare
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
float mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::timeThresh
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
float mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::timeTotal
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
float mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::timeXmX2Norm
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
float mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::timeXX2Read
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
float mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::timeXX2Write
protected
template<typename Treal, typename Tvector, typename TdebugPolicy>
Treal mat::PuriStepInfo< Treal, Tvector, TdebugPolicy >::traceX2
protected

The documentation for this class was generated from the following file: