MultidimensionalRegression::MultidimensionalRegression(const Regressifier &regressifier,bool useScaling):regressifier(NULL)
{
    this->useScaling = useScaling;
    classType = "MultidimensionalRegression";
    regressifierType = classType;
    debugLog.setProceedingText("[DEBUG MultidimensionalRegression]");
    errorLog.setProceedingText("[ERROR MultidimensionalRegression]");
    trainingLog.setProceedingText("[TRAINING MultidimensionalRegression]");
    warningLog.setProceedingText("[WARNING MultidimensionalRegression]");
    
    setRegressionModule( regressifier );
}
MultidimensionalRegression& MultidimensionalRegression::operator=(const MultidimensionalRegression &rhs){
    
	if( this != &rhs ){
        
        //Clean up any previous setup
        deleteAll();
        
        //Set the main regression module
        setRegressionModule( *rhs.getRegressifier() );
        
        //Deep copy the regression modules from the RHS to this instance
        if( !rhs.deepCopyRegressionModules( regressionModules ) ){
            errorLog << "const MultidimensionalRegression &rhs - Failed to deep copy regression modules!" << std::endl;
        }
        
        //Copy the base variables
        copyBaseVariables( (Regressifier*)&rhs );
	}
	return *this;
}
bool MultidimensionalRegression::deepCopyFrom(const Regressifier *regressifier){
    
    if( regressifier == NULL ) return false;
    
    if( this->getRegressifierType() == regressifier->getRegressifierType() ){
        
        const MultidimensionalRegression *ptr = dynamic_cast<const MultidimensionalRegression*>(regressifier);
        
        //Set the main regression module
        setRegressionModule( *ptr->getRegressifier() );
        
        //Deep copy the regression modules from the RHS to this instance
        if( !ptr->deepCopyRegressionModules( regressionModules ) ){
            errorLog << "deepCopyFrom(const Regressifier *regressifier) - Failed to deep copy regression modules!" << std::endl;
            return false;
        }
        
        //Copy the base variables
        return copyBaseVariables( regressifier );
    }
    
    return false;
}
MultidimensionalRegression::MultidimensionalRegression(const Regressifier &regressifier,bool useScaling) : Regressifier( MultidimensionalRegression::getId() ), regressifier(NULL)
{
    this->useScaling = useScaling;
    setRegressionModule( regressifier );
}