Training is done by a simple state machine, with the state stored in g->nState. It should be always in one of those states:

#define RULES (1<<12) // generate rules only
#define FACTORS (1<<13) // generate factors only
#define PARAMETERS (1<<14) // generate parameters only
#define PARRULES (1<<15) // generate rules with parameters, first rule run
#define PARFINAL (1<<16) // generate rules with parameters, parameter selection
#define RULFINAL (1<<17) // generate rules with parameters, final rule run
#define RULEXT (1<<18) // External training with no parameters or rules
#define FACTORS1 (1<<19) // first FACTORS run
#define FACTORS2 (1<<20) // second FACTORS run