aGrUM 2.3.2
a C++ library for (probabilistic) graphical models
gum::learning::DBRowGeneratorParser Class Reference

the class used to read a row in the database and to transform it into a set of DBRow instances that can be used for learning. More...

#include <agrum/base/database/DBRowGeneratorParser.h>

Collaboration diagram for gum::learning::DBRowGeneratorParser:

Public Member Functions

Constructors / Destructors
 DBRowGeneratorParser (const typename DatabaseTable::Handler &handler, const DBRowGeneratorSet &generator_set)
 default constructor
 DBRowGeneratorParser (const DBRowGeneratorParser &from)
 copy constructor
 DBRowGeneratorParser (DBRowGeneratorParser &&filter)
 move constructor
virtual DBRowGeneratorParserclone () const
 virtual copy constructor
virtual ~DBRowGeneratorParser ()
 destructor
Operators
DBRowGeneratorParseroperator= (const DBRowGeneratorParser &from)
 copy operator
DBRowGeneratorParseroperator= (DBRowGeneratorParser &&from)
 move operator
Accessors / Modifiers
bool hasRows ()
 returns true if there are still rows that can be output by the DBRowGeneratorParser
const DBRow< DBTranslatedValue > & row ()
 returns a new output row with its corresponding weight
void reset ()
 resets the parser
DatabaseTable::Handlerhandler ()
 returns the handler used by the parser
const DatabaseTable::Handlerhandler () const
 returns the handler used by the parser
const DatabaseTabledatabase () const
 returns a reference on the database
DBRowGeneratorSetgeneratorSet ()
 returns the generator set that is actually used
const DBRowGeneratorSetgeneratorSet () const
 returns the generator set that is actually used
void setRange (std::size_t begin, std::size_t end)
 sets the area in the database the handler will handle
void setColumnsOfInterest (const std::vector< std::size_t > &cols_of_interest)
 sets the columns of interest: the output DBRow needs only contain values fot these columns
void setColumnsOfInterest (std::vector< std::size_t > &&cols_of_interest)
 sets the columns of interest: the output DBRow needs only contain values fot these columns
template<typename GUM_SCALAR>
void setBayesNet (const BayesNet< GUM_SCALAR > &new_bn)
 assign a new Bayes net to all the generators that depend on a BN

Private Attributes

DatabaseTable::Handler _handler_
 the handler that is really used to parse the database
DBRowGeneratorSet _generator_set_
 the set of DBRow generators (might be empty)
std::size_t _generator_size_
 the size of the generator set

Detailed Description

the class used to read a row in the database and to transform it into a set of DBRow instances that can be used for learning.

A DBRowGeneratorParser contains a handler on a DatabaseTable that enables it to parse DBRows contained in the DatabaseTable. It also contains a DBRowGeneratorSet that is used to create output rows for each parsed DBRow. Note that if the DBRowGeneratorSet is empty, then DBRowGeneratorParser simply outputs each parsed DBRow without additional processing. To understand the difference between a DBRowGeneratorParser and a DBRowGeneratorSet, the latter is designed to take as input only one DBRow instance and to produce some output DBRow instances, whereas the former is designed to parse the content of a DatabaseTable and to produce from them some output DBRow instances.

Usage example:
// create and fill a database
.....
// create a vector with the types of the columns of database
const std::vector<gum::learning::DBTranslatedValueType>
// create a generator set
gum::learning::MyGenerator<> generator1 ( col_types, 6 );
gum::learning::MyGenerator2<> generator2 ( col_types, 4 );
genset.insertGenerator ( generator1 );
genset.insertGenerator ( generator2 );
// create the DBRowGeneratorParser
parser ( database.handler (), genset );
// use the parser to parse all the database and to apply all the
// transformations induced by generator1 and generator2
while ( parser.hasRows () ) {
const auto& dbrow = parser.row();
// do something with dbrow
}
the class used to read a row in the database and to transform it into a set of DBRow instances that c...
const DatabaseTable & database() const
returns a reference on the database
The class used to pack sets of generators.
void insertGenerator(const Generator &generator)
inserts a new generator at the end of the set
The class representing a tabular database as used by learning tasks.

Definition at line 84 of file DBRowGeneratorParser.h.

Constructor & Destructor Documentation

◆ DBRowGeneratorParser() [1/3]

gum::learning::DBRowGeneratorParser::DBRowGeneratorParser ( const typename DatabaseTable::Handler & handler,
const DBRowGeneratorSet & generator_set )

default constructor

References handler().

Referenced by DBRowGeneratorParser(), DBRowGeneratorParser(), clone(), operator=(), and operator=().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DBRowGeneratorParser() [2/3]

gum::learning::DBRowGeneratorParser::DBRowGeneratorParser ( const DBRowGeneratorParser & from)

copy constructor

References DBRowGeneratorParser().

Here is the call graph for this function:

◆ DBRowGeneratorParser() [3/3]

gum::learning::DBRowGeneratorParser::DBRowGeneratorParser ( DBRowGeneratorParser && filter)

move constructor

References DBRowGeneratorParser().

Here is the call graph for this function:

◆ ~DBRowGeneratorParser()

virtual gum::learning::DBRowGeneratorParser::~DBRowGeneratorParser ( )
virtual

destructor

Member Function Documentation

◆ clone()

virtual DBRowGeneratorParser * gum::learning::DBRowGeneratorParser::clone ( ) const
virtual

virtual copy constructor

References DBRowGeneratorParser().

Here is the call graph for this function:

◆ database()

const DatabaseTable & gum::learning::DBRowGeneratorParser::database ( ) const

returns a reference on the database

◆ generatorSet() [1/2]

DBRowGeneratorSet & gum::learning::DBRowGeneratorParser::generatorSet ( )

returns the generator set that is actually used

◆ generatorSet() [2/2]

const DBRowGeneratorSet & gum::learning::DBRowGeneratorParser::generatorSet ( ) const

returns the generator set that is actually used

◆ handler() [1/2]

DatabaseTable::Handler & gum::learning::DBRowGeneratorParser::handler ( )

returns the handler used by the parser

Referenced by DBRowGeneratorParser().

Here is the caller graph for this function:

◆ handler() [2/2]

const DatabaseTable::Handler & gum::learning::DBRowGeneratorParser::handler ( ) const

returns the handler used by the parser

◆ hasRows()

bool gum::learning::DBRowGeneratorParser::hasRows ( )

returns true if there are still rows that can be output by the DBRowGeneratorParser

The usual way of calling this method is to encapsulate it into a while loop whose stopping condition is when the handler has no more rows. This loop shall be inside a try-catch statement that enables to stop properly the loop when the NotFound exception is raised. In most practical cases, this exception will never be raised, but if you use a row generator that enables to return 0 row (say, for instance an intelligent EM that does not return any row when there are too many missing data) and if the last rows of the database are such that this generator will return no row, then the exception will be raised. Actually, it is not efficient to parse all the database to detect such a case before trying to return the rows, especially because this situation is very unlikely to occur. So a correct code to use method row () is like:

try {
while ( parser.hasRows () ) {
const auto& row = parser.row ();
do_whatever_you_want_with_the_row... ;
}
}
catch ( NotFound& ) { // stop, there are no more rows to process }
Exception : the element we looked for cannot be found.
const DBRow< DBTranslatedValue > & row()
returns a new output row with its corresponding weight

◆ operator=() [1/2]

DBRowGeneratorParser & gum::learning::DBRowGeneratorParser::operator= ( const DBRowGeneratorParser & from)

copy operator

References DBRowGeneratorParser().

Here is the call graph for this function:

◆ operator=() [2/2]

DBRowGeneratorParser & gum::learning::DBRowGeneratorParser::operator= ( DBRowGeneratorParser && from)

move operator

References DBRowGeneratorParser().

Here is the call graph for this function:

◆ reset()

void gum::learning::DBRowGeneratorParser::reset ( )

resets the parser

◆ row()

const DBRow< DBTranslatedValue > & gum::learning::DBRowGeneratorParser::row ( )

returns a new output row with its corresponding weight

The usual way of calling this method is to encapsulate it into a while loop whose stopping condition is when the handler has no more rows. This loop shall be inside a try-catch statement that enables to stop properly the loop when the NotFound exception is raised. In most practical cases, this exception will never be raised, but if you use a row generator that enables to return 0 row (say, for instance an intelligent EM that does not return any row when there are too many missing data) and if the last rows of the database are such that this generator will return no row, then the exception will be raised. Actually, it is not efficient to parse all the database to detect such a case before trying to return the rows, especially because this situation is very unlikely to occur. So a correct code to use method row () is like:

try {
while ( parser.hasRows () ) {
const auto& row = parser.row ();
do_whatever_you_want_with_the_row... ;
}
}
catch ( NotFound& ) { // stop, there are no more rows to process }

◆ setBayesNet()

template<typename GUM_SCALAR>
void gum::learning::DBRowGeneratorParser::setBayesNet ( const BayesNet< GUM_SCALAR > & new_bn)

assign a new Bayes net to all the generators that depend on a BN

Typically, generators based on EM or K-means depend on a model to compute correctly their outputs. Method setBayesNet enables to update their BN model.

Warning
if one generator that relies on Bayes nets cannot be assigned new_bn, then no generator is updated and an exception is raised.

◆ setColumnsOfInterest() [1/2]

void gum::learning::DBRowGeneratorParser::setColumnsOfInterest ( const std::vector< std::size_t > & cols_of_interest)

sets the columns of interest: the output DBRow needs only contain values fot these columns

This method is useful, e.g., for EM-like algorithms that need to know which unobserved variables/values need be filled.

Exceptions
OperationNotAllowedis raised if the generator set has already started generating output rows and is currently in a state where the generation is not completed yet (i.e., we still need to call the generate() method to complete it).

◆ setColumnsOfInterest() [2/2]

void gum::learning::DBRowGeneratorParser::setColumnsOfInterest ( std::vector< std::size_t > && cols_of_interest)

sets the columns of interest: the output DBRow needs only contain values fot these columns

This method is useful, e.g., for EM-like algorithms that need to know which unobserved variables/values need be filled.

Exceptions
OperationNotAllowedis raised if the generator set has already started generating output rows and is currently in a state where the generation is not completed yet (i.e., we still need to call the generate() method to complete it).

◆ setRange()

void gum::learning::DBRowGeneratorParser::setRange ( std::size_t begin,
std::size_t end )

sets the area in the database the handler will handle

In addition to setting the area that will be parsed by the handler, this method makes the handler point to the beginning of the area.

Parameters
beginthe first row to be handled
endthe handler handles rows in interval [begin,end). Thus, the endth row is not included in the set of rows handled.
Warning
if begin is greater than end, these values are swapped.
Exceptions
NullElementis raised if the handler does not point to any database
SizeErroris raised if end is greater than the number of rows of the database

Member Data Documentation

◆ _generator_set_

DBRowGeneratorSet gum::learning::DBRowGeneratorParser::_generator_set_
private

the set of DBRow generators (might be empty)

Definition at line 256 of file DBRowGeneratorParser.h.

◆ _generator_size_

std::size_t gum::learning::DBRowGeneratorParser::_generator_size_
private

the size of the generator set

Definition at line 259 of file DBRowGeneratorParser.h.

◆ _handler_

DatabaseTable::Handler gum::learning::DBRowGeneratorParser::_handler_
private

the handler that is really used to parse the database

Definition at line 253 of file DBRowGeneratorParser.h.


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