From 36ccb7d6082e296b9d14d61b8c64ad925a0514fd Mon Sep 17 00:00:00 2001 From: Akash Shivram Date: Mon, 9 Apr 2018 15:15:11 +0530 Subject: [PATCH] Remove obtain_from_generic (#4224) --- .../GaussianProcessClassification.cpp | 8 ++----- src/shogun/evaluation/StructuredAccuracy.cpp | 8 +++---- src/shogun/machine/GaussianProcessMachine.cpp | 4 ++-- src/shogun/machine/LinearLatentMachine.cpp | 2 +- .../machine/gp/ExactInferenceMethod.cpp | 21 +++++++------------ src/shogun/machine/gp/FITCInferenceMethod.cpp | 9 +++----- .../gp/SingleFITCLaplaceInferenceMethod.cpp | 3 +-- .../gp/SingleLaplaceInferenceMethod.cpp | 3 +-- .../machine/gp/VarDTCInferenceMethod.cpp | 6 ++---- .../regression/GaussianProcessRegression.cpp | 7 ++----- .../structure/FactorGraphDataGenerator.cpp | 4 ++-- src/shogun/structure/FactorGraphModel.cpp | 13 ++++++------ src/shogun/structure/HMSVMModel.cpp | 11 +++++----- .../structure/HashedMultilabelModel.cpp | 9 ++++---- .../structure/HierarchicalMultilabelModel.cpp | 6 +++--- src/shogun/structure/MulticlassModel.cpp | 8 +++---- src/shogun/structure/MulticlassSOLabels.cpp | 4 ++-- src/shogun/structure/MultilabelCLRModel.cpp | 9 ++++---- src/shogun/structure/MultilabelModel.cpp | 6 +++--- src/shogun/structure/MultilabelSOLabels.cpp | 4 ++-- .../distribution/MixtureModel_unittest.cc | 9 ++++---- .../unit/labels/StructuredLabels_unittest.cc | 12 +++++------ .../structure/DualLibQPBMSOSVM_unittest.cc | 2 +- .../HashedMultilabelModel_unittest.cc | 6 ++---- .../HierarchicalMultilabelModel_unittest.cc | 12 ++++------- .../structure/MultilabelCLRModel_unittest.cc | 6 ++---- .../structure/MultilabelModel_unittest.cc | 12 ++++------- .../structure/MultilabelSOLabels_unittest.cc | 10 ++++----- 28 files changed, 87 insertions(+), 127 deletions(-) diff --git a/src/shogun/classifier/GaussianProcessClassification.cpp b/src/shogun/classifier/GaussianProcessClassification.cpp index ac26777b1b5..40e29921af8 100644 --- a/src/shogun/classifier/GaussianProcessClassification.cpp +++ b/src/shogun/classifier/GaussianProcessClassification.cpp @@ -120,10 +120,8 @@ CBinaryLabels* CGaussianProcessClassification::apply_binary( if (m_method->get_inference_type()== INF_FITC_LAPLACE_SINGLE) { #ifdef USE_GPL_SHOGUN - CSingleFITCLaplaceInferenceMethod* fitc_method= - CSingleFITCLaplaceInferenceMethod::obtain_from_generic(m_method); + CSingleFITCLaplaceInferenceMethod* fitc_method = m_method->as(); data=fitc_method->get_inducing_features(); - SG_UNREF(fitc_method); #else SG_GPL_ONLY #endif //USE_GPL_SHOGUN @@ -156,10 +154,8 @@ bool CGaussianProcessClassification::train_machine(CFeatures* data) if (m_method->get_inference_type()==INF_FITC_LAPLACE_SINGLE) { #ifdef USE_GPL_SHOGUN - CSingleFITCLaplaceInferenceMethod* fitc_method= - CSingleFITCLaplaceInferenceMethod::obtain_from_generic(m_method); + CSingleFITCLaplaceInferenceMethod* fitc_method = m_method->as(); fitc_method->set_inducing_features(data); - SG_UNREF(fitc_method); #else SG_ERROR("Single FITC Laplace inference only supported under GPL.\n") #endif //USE_GPL_SHOGUN diff --git a/src/shogun/evaluation/StructuredAccuracy.cpp b/src/shogun/evaluation/StructuredAccuracy.cpp index 0b0979024e5..f082432fe21 100644 --- a/src/shogun/evaluation/StructuredAccuracy.cpp +++ b/src/shogun/evaluation/StructuredAccuracy.cpp @@ -74,8 +74,8 @@ float64_t CStructuredAccuracy::evaluate_real(CStructuredLabels * predicted, for (int32_t i = 0 ; i < length ; ++i) { - CRealNumber * truth = CRealNumber::obtain_from_generic(ground_truth->get_label(i)); - CRealNumber * pred = CRealNumber::obtain_from_generic(predicted->get_label(i)); + CRealNumber * truth = ground_truth->get_label(i)->as(); + CRealNumber * pred = predicted->get_label(i)->as(); num_equal += truth->value == pred->value; @@ -96,8 +96,8 @@ float64_t CStructuredAccuracy::evaluate_sequence(CStructuredLabels * predicted, for (int32_t i = 0 ; i < length ; ++i) { - CSequence * true_seq = CSequence::obtain_from_generic(ground_truth->get_label(i)); - CSequence * pred_seq = CSequence::obtain_from_generic(predicted->get_label(i)); + CSequence * true_seq = ground_truth->get_label(i)->as(); + CSequence * pred_seq = predicted->get_label(i)->as(); SGVector true_seq_data = true_seq->get_data(); SGVector pred_seq_data = pred_seq->get_data(); diff --git a/src/shogun/machine/GaussianProcessMachine.cpp b/src/shogun/machine/GaussianProcessMachine.cpp index 77072fbf0a0..80c61d89798 100644 --- a/src/shogun/machine/GaussianProcessMachine.cpp +++ b/src/shogun/machine/GaussianProcessMachine.cpp @@ -89,7 +89,7 @@ SGVector CGaussianProcessMachine::get_posterior_means(CFeatures* data // get kernel and compute kernel matrix: K(feat, data)*scale^2 CKernel* training_kernel=m_method->get_kernel(); - CKernel* kernel=CKernel::obtain_from_generic(training_kernel->clone()); + CKernel* kernel = training_kernel->clone()->as(); SG_UNREF(training_kernel); kernel->init(feat, data); @@ -153,7 +153,7 @@ SGVector CGaussianProcessMachine::get_posterior_variances( // get kernel and compute kernel matrix: K(data, data)*scale^2 CKernel* training_kernel=m_method->get_kernel(); - CKernel* kernel=CKernel::obtain_from_generic(training_kernel->clone()); + CKernel* kernel = training_kernel->clone()->as(); SG_UNREF(training_kernel); kernel->init(data, data); diff --git a/src/shogun/machine/LinearLatentMachine.cpp b/src/shogun/machine/LinearLatentMachine.cpp index e7cbe95eb7c..a15e55daeba 100644 --- a/src/shogun/machine/LinearLatentMachine.cpp +++ b/src/shogun/machine/LinearLatentMachine.cpp @@ -40,7 +40,7 @@ CLatentLabels* CLinearLatentMachine::apply_latent(CFeatures* data) if (m_model == NULL) SG_ERROR("LatentModel is not set!\n") - CLatentFeatures* lf = CLatentFeatures::obtain_from_generic(data); + CLatentFeatures* lf = data->as(); m_model->set_features(lf); return apply_latent(); diff --git a/src/shogun/machine/gp/ExactInferenceMethod.cpp b/src/shogun/machine/gp/ExactInferenceMethod.cpp index b366b34b5cb..b801dd6118d 100644 --- a/src/shogun/machine/gp/ExactInferenceMethod.cpp +++ b/src/shogun/machine/gp/ExactInferenceMethod.cpp @@ -104,9 +104,8 @@ SGVector CExactInferenceMethod::get_diagonal_vector() update(); // get the sigma variable from the Gaussian likelihood model - CGaussianLikelihood* lik=CGaussianLikelihood::obtain_from_generic(m_model); + CGaussianLikelihood* lik = m_model->as(); float64_t sigma=lik->get_sigma(); - SG_UNREF(lik); // compute diagonal vector: sW=1/sigma SGVector result(m_features->get_num_vectors()); @@ -121,9 +120,8 @@ float64_t CExactInferenceMethod::get_negative_log_marginal_likelihood() update(); // get the sigma variable from the Gaussian likelihood model - CGaussianLikelihood* lik=CGaussianLikelihood::obtain_from_generic(m_model); + CGaussianLikelihood* lik = m_model->as(); float64_t sigma=lik->get_sigma(); - SG_UNREF(lik); // create eigen representation of alpha and L Map eigen_alpha(m_alpha.vector, m_alpha.vlen); @@ -178,9 +176,8 @@ SGMatrix CExactInferenceMethod::get_posterior_covariance() void CExactInferenceMethod::update_chol() { // get the sigma variable from the Gaussian likelihood model - CGaussianLikelihood* lik=CGaussianLikelihood::obtain_from_generic(m_model); + CGaussianLikelihood* lik = m_model->as(); float64_t sigma=lik->get_sigma(); - SG_UNREF(lik); /* check whether to allocate cholesky memory */ if (!m_L.matrix || m_L.num_rows!=m_ktrtr.num_rows) @@ -198,9 +195,8 @@ void CExactInferenceMethod::update_chol() void CExactInferenceMethod::update_alpha() { // get the sigma variable from the Gaussian likelihood model - CGaussianLikelihood* lik=CGaussianLikelihood::obtain_from_generic(m_model); + CGaussianLikelihood* lik = m_model->as(); float64_t sigma=lik->get_sigma(); - SG_UNREF(lik); // get labels and mean vector and create eigen representation SGVector y=((CRegressionLabels*) m_labels)->get_labels(); @@ -252,9 +248,8 @@ void CExactInferenceMethod::update_cov() MatrixXd eigen_V = eigen_L.triangularView().adjoint().solve( eigen_K * std::exp(m_log_scale * 2.0)); - CGaussianLikelihood* lik=CGaussianLikelihood::obtain_from_generic(m_model); + CGaussianLikelihood* lik = m_model->as(); float64_t sigma=lik->get_sigma(); - SG_UNREF(lik); eigen_V = eigen_V/sigma; // compute covariance matrix of the posterior: Sigma = K - V^T * V @@ -265,9 +260,8 @@ void CExactInferenceMethod::update_cov() void CExactInferenceMethod::update_deriv() { // get the sigma variable from the Gaussian likelihood model - CGaussianLikelihood* lik=CGaussianLikelihood::obtain_from_generic(m_model); + CGaussianLikelihood* lik = m_model->as(); float64_t sigma=lik->get_sigma(); - SG_UNREF(lik); // create eigen representation of derivative matrix and cholesky Map eigen_L(m_L.matrix, m_L.num_rows, m_L.num_cols); @@ -328,9 +322,8 @@ SGVector CExactInferenceMethod::get_derivative_wrt_likelihood_model( m_model->get_name(), param->m_name) // get the sigma variable from the Gaussian likelihood model - CGaussianLikelihood* lik=CGaussianLikelihood::obtain_from_generic(m_model); + CGaussianLikelihood* lik = m_model->as(); float64_t sigma=lik->get_sigma(); - SG_UNREF(lik); // create eigen representation of the matrix Q Map eigen_Q(m_Q.matrix, m_Q.num_rows, m_Q.num_cols); diff --git a/src/shogun/machine/gp/FITCInferenceMethod.cpp b/src/shogun/machine/gp/FITCInferenceMethod.cpp index c8046315d77..a3590356f5d 100644 --- a/src/shogun/machine/gp/FITCInferenceMethod.cpp +++ b/src/shogun/machine/gp/FITCInferenceMethod.cpp @@ -112,9 +112,8 @@ SGVector CFITCInferenceMethod::get_diagonal_vector() update(); // get the sigma variable from the Gaussian likelihood model - CGaussianLikelihood* lik=CGaussianLikelihood::obtain_from_generic(m_model); + CGaussianLikelihood* lik = m_model->as(); float64_t sigma=lik->get_sigma(); - SG_UNREF(lik); // compute diagonal vector: sW=1/sigma SGVector result(m_features->get_num_vectors()); @@ -153,9 +152,8 @@ void CFITCInferenceMethod::update_chol() //time complexits O(m^2*n) // get the sigma variable from the Gaussian likelihood model - CGaussianLikelihood* lik=CGaussianLikelihood::obtain_from_generic(m_model); + CGaussianLikelihood* lik = m_model->as(); float64_t sigma=lik->get_sigma(); - SG_UNREF(lik); // eigen3 representation of covariance matrix of inducing features (m_kuu) // and training features (m_ktru) @@ -418,9 +416,8 @@ SGVector CFITCInferenceMethod::get_derivative_wrt_likelihood_model( Map eigen_B(m_B.matrix, m_B.num_rows, m_B.num_cols); // get the sigma variable from the Gaussian likelihood model - CGaussianLikelihood* lik=CGaussianLikelihood::obtain_from_generic(m_model); + CGaussianLikelihood* lik = m_model->as(); float64_t sigma=lik->get_sigma(); - SG_UNREF(lik); SGVector result(1); diff --git a/src/shogun/machine/gp/SingleFITCLaplaceInferenceMethod.cpp b/src/shogun/machine/gp/SingleFITCLaplaceInferenceMethod.cpp index 470058beb7d..b70069190db 100644 --- a/src/shogun/machine/gp/SingleFITCLaplaceInferenceMethod.cpp +++ b/src/shogun/machine/gp/SingleFITCLaplaceInferenceMethod.cpp @@ -245,9 +245,8 @@ float64_t CSingleFITCLaplaceNewtonOptimizer::minimize() if (m_obj->m_model->get_model_type()==LT_STUDENTST) { - CStudentsTLikelihood* lik=CStudentsTLikelihood::obtain_from_generic(m_obj->m_model); + CStudentsTLikelihood* lik = m_obj->m_model->as(); df=lik->get_degrees_freedom(); - SG_UNREF(lik); } else df=1; diff --git a/src/shogun/machine/gp/SingleLaplaceInferenceMethod.cpp b/src/shogun/machine/gp/SingleLaplaceInferenceMethod.cpp index 0c0436fde2f..f577d7ab0df 100644 --- a/src/shogun/machine/gp/SingleLaplaceInferenceMethod.cpp +++ b/src/shogun/machine/gp/SingleLaplaceInferenceMethod.cpp @@ -209,9 +209,8 @@ float64_t CSingleLaplaceNewtonOptimizer::minimize() if (m_obj->m_model->get_model_type()==LT_STUDENTST) { - CStudentsTLikelihood* lik=CStudentsTLikelihood::obtain_from_generic(m_obj->m_model); + CStudentsTLikelihood* lik = m_obj->m_model->as(); df=lik->get_degrees_freedom(); - SG_UNREF(lik); } else df=1; diff --git a/src/shogun/machine/gp/VarDTCInferenceMethod.cpp b/src/shogun/machine/gp/VarDTCInferenceMethod.cpp index 0d9da0a53e8..1df3a22abbc 100644 --- a/src/shogun/machine/gp/VarDTCInferenceMethod.cpp +++ b/src/shogun/machine/gp/VarDTCInferenceMethod.cpp @@ -168,9 +168,8 @@ float64_t CVarDTCInferenceMethod::get_negative_log_marginal_likelihood() void CVarDTCInferenceMethod::update_chol() { // get the sigma variable from the Gaussian likelihood model - CGaussianLikelihood* lik=CGaussianLikelihood::obtain_from_generic(m_model); + CGaussianLikelihood* lik = m_model->as(); float64_t sigma=lik->get_sigma(); - SG_UNREF(lik); m_sigma2=sigma*sigma; //m-by-m matrix @@ -266,9 +265,8 @@ void CVarDTCInferenceMethod::update_deriv() Map eigen_Tmm(m_Tmm.matrix, m_Tmm.num_rows, m_Tmm.num_cols); Map eigen_Tnm(m_Tnm.matrix, m_Tnm.num_rows, m_Tnm.num_cols); - CGaussianLikelihood* lik=CGaussianLikelihood::obtain_from_generic(m_model); + CGaussianLikelihood* lik = m_model->as(); float64_t sigma=lik->get_sigma(); - SG_UNREF(lik); m_sigma2=sigma*sigma; //invLmInvLa = invLm*invLa; diff --git a/src/shogun/regression/GaussianProcessRegression.cpp b/src/shogun/regression/GaussianProcessRegression.cpp index 8c013a78188..21ba37fe2f4 100644 --- a/src/shogun/regression/GaussianProcessRegression.cpp +++ b/src/shogun/regression/GaussianProcessRegression.cpp @@ -49,10 +49,8 @@ CRegressionLabels* CGaussianProcessRegression::apply_regression(CFeatures* data) // use inducing features for FITC inference method if (m_method->get_inference_type()==INF_FITC_REGRESSION) { - CFITCInferenceMethod* fitc_method= - CFITCInferenceMethod::obtain_from_generic(m_method); + CFITCInferenceMethod* fitc_method = m_method->as(); feat=fitc_method->get_inducing_features(); - SG_UNREF(fitc_method); } else feat=m_method->get_features(); @@ -84,8 +82,7 @@ bool CGaussianProcessRegression::train_machine(CFeatures* data) // set inducing features for FITC inference method if (m_method->get_inference_type()==INF_FITC_REGRESSION) { - CFITCInferenceMethod* fitc_method= - CFITCInferenceMethod::obtain_from_generic(m_method); + CFITCInferenceMethod* fitc_method = m_method->as(); fitc_method->set_inducing_features(data); SG_UNREF(fitc_method); } diff --git a/src/shogun/structure/FactorGraphDataGenerator.cpp b/src/shogun/structure/FactorGraphDataGenerator.cpp index 3e337b47246..fee5c3e41b4 100644 --- a/src/shogun/structure/FactorGraphDataGenerator.cpp +++ b/src/shogun/structure/FactorGraphDataGenerator.cpp @@ -545,8 +545,8 @@ float64_t CFactorGraphDataGenerator::test_sosvm(EMAPInferType infer_type) CStructuredData* y_truth = fg_labels_train->get_label(i); acc_loss_sgd += model->delta_loss(y_truth, y_pred); - CFactorGraphObservation* y_t = CFactorGraphObservation::obtain_from_generic(y_truth); - CFactorGraphObservation* y_p = CFactorGraphObservation::obtain_from_generic(y_pred); + CFactorGraphObservation* y_t = y_truth->as(); + CFactorGraphObservation* y_p = y_pred->as(); SGVector s_t = y_t->get_data(); SGVector s_p = y_p->get_data(); diff --git a/src/shogun/structure/FactorGraphModel.cpp b/src/shogun/structure/FactorGraphModel.cpp index a8e8dc6faa2..86ca32f70ed 100644 --- a/src/shogun/structure/FactorGraphModel.cpp +++ b/src/shogun/structure/FactorGraphModel.cpp @@ -228,11 +228,11 @@ void CFactorGraphModel::w_to_fparams(SGVector w) SGVector< float64_t > CFactorGraphModel::get_joint_feature_vector(int32_t feat_idx, CStructuredData* y) { // factor graph instance - CFactorGraphFeatures* mf = CFactorGraphFeatures::obtain_from_generic(m_features); + CFactorGraphFeatures* mf = m_features->as(); CFactorGraph* fg = mf->get_sample(feat_idx); // ground truth states - CFactorGraphObservation* fg_states = CFactorGraphObservation::obtain_from_generic(y); + CFactorGraphObservation* fg_states = y->as(); SGVector states = fg_states->get_data(); // initialize psi @@ -281,7 +281,7 @@ SGVector< float64_t > CFactorGraphModel::get_joint_feature_vector(int32_t feat_i CResultSet* CFactorGraphModel::argmax(SGVector w, int32_t feat_idx, bool const training) { // factor graph instance - CFactorGraphFeatures* mf = CFactorGraphFeatures::obtain_from_generic(m_features); + CFactorGraphFeatures* mf = m_features->as(); CFactorGraph* fg = mf->get_sample(feat_idx); // prepare factor graph @@ -310,8 +310,7 @@ CResultSet* CFactorGraphModel::argmax(SGVector w, int32_t feat_idx, b ret->psi_computed = true; // y_truth - CFactorGraphObservation* y_truth = - CFactorGraphObservation::obtain_from_generic(m_labels->get_label(feat_idx)); + CFactorGraphObservation* y_truth = m_labels->get_label(feat_idx)->as(); SGVector states_gt = y_truth->get_data(); @@ -375,8 +374,8 @@ CResultSet* CFactorGraphModel::argmax(SGVector w, int32_t feat_idx, b float64_t CFactorGraphModel::delta_loss(CStructuredData* y1, CStructuredData* y2) { - CFactorGraphObservation* y_truth = CFactorGraphObservation::obtain_from_generic(y1); - CFactorGraphObservation* y_pred = CFactorGraphObservation::obtain_from_generic(y2); + CFactorGraphObservation* y_truth = y1->as(); + CFactorGraphObservation* y_pred = y2->as(); SGVector s_truth = y_truth->get_data(); SGVector s_pred = y_pred->get_data(); diff --git a/src/shogun/structure/HMSVMModel.cpp b/src/shogun/structure/HMSVMModel.cpp index c43a814adab..351813b7ecf 100644 --- a/src/shogun/structure/HMSVMModel.cpp +++ b/src/shogun/structure/HMSVMModel.cpp @@ -68,7 +68,7 @@ SGVector< float64_t > CHMSVMModel::get_joint_feature_vector( int32_t D = mf->get_num_features(); // Get the sequence of labels - CSequence* label_seq = CSequence::obtain_from_generic(y); + CSequence* label_seq = y->as(); // Initialize psi SGVector< float64_t > psi(get_dim()); @@ -228,8 +228,7 @@ CResultSet* CHMSVMModel::argmax( // If argmax used while training, add to E the loss matrix (loss-augmented inference) if ( training ) { - CSequence* ytrue = - CSequence::obtain_from_generic(m_labels->get_label(feat_idx)); + CSequence* ytrue = m_labels->get_label(feat_idx)->as(); REQUIRE(ytrue->get_data().size() == T, "T, the length of the feature " "x^i (%d) and the length of its corresponding label y^i " @@ -344,8 +343,8 @@ CResultSet* CHMSVMModel::argmax( float64_t CHMSVMModel::delta_loss(CStructuredData* y1, CStructuredData* y2) { - CSequence* seq1 = CSequence::obtain_from_generic(y1); - CSequence* seq2 = CSequence::obtain_from_generic(y2); + CSequence* seq1 = y1->as(); + CSequence* seq2 = y2->as(); // Compute the Hamming loss, number of distinct elements in the sequences return m_state_model->loss(seq1, seq2); @@ -448,7 +447,7 @@ bool CHMSVMModel::check_training_setup() const int32_t state; for ( int32_t i = 0 ; i < hmsvm_labels->get_num_labels() ; ++i ) { - seq = CSequence::obtain_from_generic(hmsvm_labels->get_label(i)); + seq = hmsvm_labels->get_label(i)->as(); SGVector seq_data = seq->get_data(); for ( int32_t j = 0 ; j < seq_data.size() ; ++j ) diff --git a/src/shogun/structure/HashedMultilabelModel.cpp b/src/shogun/structure/HashedMultilabelModel.cpp index 72fe4deb7b9..c3cace68267 100644 --- a/src/shogun/structure/HashedMultilabelModel.cpp +++ b/src/shogun/structure/HashedMultilabelModel.cpp @@ -100,7 +100,7 @@ SGSparseVector CHashedMultilabelModel::get_sparse_joint_feature_vecto SGSparseVector vec = ((CSparseFeatures *)m_features)-> get_sparse_feature_vector(feat_idx); - CSparseMultilabel * slabel = CSparseMultilabel::obtain_from_generic(y); + CSparseMultilabel * slabel = y->as(); ASSERT(slabel != NULL); SGVector slabel_data = slabel->get_data(); @@ -131,8 +131,8 @@ SGSparseVector CHashedMultilabelModel::get_sparse_joint_feature_vecto float64_t CHashedMultilabelModel::delta_loss(CStructuredData * y1, CStructuredData * y2) { - CSparseMultilabel * y1_slabel = CSparseMultilabel::obtain_from_generic(y1); - CSparseMultilabel * y2_slabel = CSparseMultilabel::obtain_from_generic(y2); + CSparseMultilabel * y1_slabel = y1->as(); + CSparseMultilabel * y2_slabel = y2->as(); ASSERT(y1_slabel != NULL); ASSERT(y2_slabel != NULL); @@ -253,8 +253,7 @@ CResultSet * CHashedMultilabelModel::argmax(SGVector w, float64_t score = 0, total_score = 0; - CSparseMultilabel * slabel = CSparseMultilabel::obtain_from_generic( - multi_labs->get_label(feat_idx)); + CSparseMultilabel * slabel = multi_labs->get_label(feat_idx)->as(); SGVector slabel_data = slabel->get_data(); SGVector y_truth = CMultilabelSOLabels::to_dense( slabel, m_num_classes, 1, 0); diff --git a/src/shogun/structure/HierarchicalMultilabelModel.cpp b/src/shogun/structure/HierarchicalMultilabelModel.cpp index d436c4d848c..e9731774b08 100644 --- a/src/shogun/structure/HierarchicalMultilabelModel.cpp +++ b/src/shogun/structure/HierarchicalMultilabelModel.cpp @@ -134,7 +134,7 @@ SGVector CHierarchicalMultilabelModel::get_label_vector( SGVector CHierarchicalMultilabelModel::get_joint_feature_vector( int32_t feat_idx, CStructuredData * y) { - CSparseMultilabel * slabel = CSparseMultilabel::obtain_from_generic(y); + CSparseMultilabel * slabel = y->as(); SGVector slabel_data = slabel->get_data(); SGVector label_vector = get_label_vector(slabel_data); @@ -166,8 +166,8 @@ SGVector CHierarchicalMultilabelModel::get_joint_feature_vector( float64_t CHierarchicalMultilabelModel::delta_loss(CStructuredData * y1, CStructuredData * y2) { - CSparseMultilabel * y1_slabel = CSparseMultilabel::obtain_from_generic(y1); - CSparseMultilabel * y2_slabel = CSparseMultilabel::obtain_from_generic(y2); + CSparseMultilabel * y1_slabel = y1->as(); + CSparseMultilabel * y2_slabel = y2->as(); ASSERT(y1_slabel != NULL); ASSERT(y2_slabel != NULL); diff --git a/src/shogun/structure/MulticlassModel.cpp b/src/shogun/structure/MulticlassModel.cpp index 878a140beb9..c12c611d314 100644 --- a/src/shogun/structure/MulticlassModel.cpp +++ b/src/shogun/structure/MulticlassModel.cpp @@ -50,7 +50,7 @@ SGVector< float64_t > CMulticlassModel::get_joint_feature_vector(int32_t feat_id SGVector< float64_t > x = ((CDotFeatures*) m_features)-> get_computed_dot_feature_vector(feat_idx); - CRealNumber* r = CRealNumber::obtain_from_generic(y); + CRealNumber* r = y->as(); ASSERT(r != NULL) float64_t label_value = r->value; @@ -123,8 +123,8 @@ CResultSet* CMulticlassModel::argmax( float64_t CMulticlassModel::delta_loss(CStructuredData* y1, CStructuredData* y2) { - CRealNumber* rn1 = CRealNumber::obtain_from_generic(y1); - CRealNumber* rn2 = CRealNumber::obtain_from_generic(y2); + CRealNumber* rn1 = y1->as(); + CRealNumber* rn2 = y2->as(); ASSERT(rn1 != NULL) ASSERT(rn2 != NULL) @@ -136,7 +136,7 @@ float64_t CMulticlassModel::delta_loss(int32_t y1_idx, float64_t y2) REQUIRE(y1_idx >= 0 || y1_idx < m_labels->get_num_labels(), "The label index must be inside [0, num_labels-1]\n"); - CRealNumber* rn1 = CRealNumber::obtain_from_generic(m_labels->get_label(y1_idx)); + CRealNumber* rn1 = m_labels->get_label(y1_idx)->as(); float64_t ret = delta_loss(rn1->value, y2); SG_UNREF(rn1); diff --git a/src/shogun/structure/MulticlassSOLabels.cpp b/src/shogun/structure/MulticlassSOLabels.cpp index 5f12b5b6dec..9c09ff2f46e 100644 --- a/src/shogun/structure/MulticlassSOLabels.cpp +++ b/src/shogun/structure/MulticlassSOLabels.cpp @@ -56,7 +56,7 @@ CStructuredData* CMulticlassSOLabels::get_label(int32_t idx) void CMulticlassSOLabels::add_label(CStructuredData* label) { SG_REF(label); - float64_t value = CRealNumber::obtain_from_generic(label)->value; + float64_t value = label->as()->value; SG_UNREF(label); //ensure_valid_sdt(label); @@ -73,7 +73,7 @@ void CMulticlassSOLabels::add_label(CStructuredData* label) bool CMulticlassSOLabels::set_label(int32_t idx, CStructuredData* label) { SG_REF(label); - float64_t value = CRealNumber::obtain_from_generic(label)->value; + float64_t value = label->as()->value; SG_UNREF(label); // ensure_valid_sdt(label); diff --git a/src/shogun/structure/MultilabelCLRModel.cpp b/src/shogun/structure/MultilabelCLRModel.cpp index 3f754d4c81c..1d744b4b26c 100644 --- a/src/shogun/structure/MultilabelCLRModel.cpp +++ b/src/shogun/structure/MultilabelCLRModel.cpp @@ -58,7 +58,7 @@ SGVector CMultilabelCLRModel::get_joint_feature_vector( psi.zero(); int32_t num_classes = ((CMultilabelSOLabels *)m_labels)->get_num_classes(); - int32_t num_pos_labels = (CSparseMultilabel::obtain_from_generic(y))-> + int32_t num_pos_labels = (y->as())-> get_data().vlen; int32_t num_neg_labels = num_classes - num_pos_labels; @@ -93,8 +93,8 @@ SGVector CMultilabelCLRModel::get_joint_feature_vector( float64_t CMultilabelCLRModel::delta_loss(CStructuredData * y1, CStructuredData * y2) { - CSparseMultilabel * y1_slabel = CSparseMultilabel::obtain_from_generic(y1); - CSparseMultilabel * y2_slabel = CSparseMultilabel::obtain_from_generic(y2); + CSparseMultilabel * y1_slabel = y1->as(); + CSparseMultilabel * y2_slabel = y2->as(); ASSERT(y1_slabel != NULL); ASSERT(y2_slabel != NULL); @@ -185,8 +185,7 @@ CResultSet * CMultilabelCLRModel::argmax(SGVector w, int32_t feat_idx { plus_minus_one.set_const(-1); - CSparseMultilabel * y_true = CSparseMultilabel::obtain_from_generic( - multi_labs->get_label(feat_idx)); + CSparseMultilabel * y_true = multi_labs->get_label(feat_idx)->as(); SGVector y_true_data = y_true->get_data(); for (index_t i = 0; i < y_true_data.vlen; i++) diff --git a/src/shogun/structure/MultilabelModel.cpp b/src/shogun/structure/MultilabelModel.cpp index bb6b6c8eec3..160e0a6b05c 100644 --- a/src/shogun/structure/MultilabelModel.cpp +++ b/src/shogun/structure/MultilabelModel.cpp @@ -69,7 +69,7 @@ SGVector CMultilabelModel::get_joint_feature_vector(int32_t feat_idx, SGVector x = ((CDotFeatures *)m_features)-> get_computed_dot_feature_vector(feat_idx); - CSparseMultilabel * slabel = CSparseMultilabel::obtain_from_generic(y); + CSparseMultilabel * slabel = y->as(); ASSERT(slabel != NULL); SGVector slabel_data = slabel->get_data(); @@ -86,8 +86,8 @@ SGVector CMultilabelModel::get_joint_feature_vector(int32_t feat_idx, float64_t CMultilabelModel::delta_loss(CStructuredData * y1, CStructuredData * y2) { - CSparseMultilabel * y1_slabel = CSparseMultilabel::obtain_from_generic(y1); - CSparseMultilabel * y2_slabel = CSparseMultilabel::obtain_from_generic(y2); + CSparseMultilabel * y1_slabel = y1->as(); + CSparseMultilabel * y2_slabel = y2->as(); ASSERT(y1_slabel != NULL); ASSERT(y2_slabel != NULL); diff --git a/src/shogun/structure/MultilabelSOLabels.cpp b/src/shogun/structure/MultilabelSOLabels.cpp index eccc58c3145..86b64e7bf3e 100644 --- a/src/shogun/structure/MultilabelSOLabels.cpp +++ b/src/shogun/structure/MultilabelSOLabels.cpp @@ -106,7 +106,7 @@ bool CMultilabelSOLabels::set_label(int32_t j, CStructuredData * label) m_sdt = label->get_structured_data_type(); } - CSparseMultilabel * slabel = CSparseMultilabel::obtain_from_generic(label); + CSparseMultilabel * slabel = label->as(); m_multilabel_labels->set_label(j, slabel->get_data()); return true; } @@ -131,7 +131,7 @@ void CMultilabelSOLabels::ensure_valid(const char * context) SGVector CMultilabelSOLabels::to_dense(CStructuredData * label, int32_t dense_dim, float64_t d_true, float64_t d_false) { - CSparseMultilabel * slabel = CSparseMultilabel::obtain_from_generic(label); + CSparseMultilabel * slabel = label->as(); SGVector slabel_data = slabel->get_data(); return CMultilabelLabels::to_dense(&slabel_data, dense_dim, d_true, d_false); diff --git a/tests/unit/distribution/MixtureModel_unittest.cc b/tests/unit/distribution/MixtureModel_unittest.cc index ab0af8dee9e..37d1989e821 100644 --- a/tests/unit/distribution/MixtureModel_unittest.cc +++ b/tests/unit/distribution/MixtureModel_unittest.cc @@ -73,8 +73,8 @@ TEST(MixtureModel,gaussian_mixture_model) CMixtureModel* mix=new CMixtureModel(comps,weights); mix->train(feats); - CDistribution* distr=CDistribution::obtain_from_generic(comps->get_element(0)); - CGaussian* outg=CGaussian::obtain_from_generic(distr); + CDistribution* distr = comps->get_element(0)->as(); + CGaussian* outg = distr->as(); SGVector m=outg->get_mean(); SGMatrix cov=outg->get_cov(); @@ -85,8 +85,8 @@ TEST(MixtureModel,gaussian_mixture_model) SG_UNREF(outg); SG_UNREF(distr); - distr=CDistribution::obtain_from_generic(comps->get_element(1)); - outg=CGaussian::obtain_from_generic(distr); + distr = comps->get_element(1)->as(); + outg = distr->as(); m=outg->get_mean(); cov=outg->get_cov(); @@ -94,7 +94,6 @@ TEST(MixtureModel,gaussian_mixture_model) EXPECT_NEAR(cov(0,0),1.095106568,eps); SG_UNREF(outg); - SG_UNREF(distr); SG_UNREF(mix) } diff --git a/tests/unit/labels/StructuredLabels_unittest.cc b/tests/unit/labels/StructuredLabels_unittest.cc index d5dad26b0d4..40b4be6b962 100644 --- a/tests/unit/labels/StructuredLabels_unittest.cc +++ b/tests/unit/labels/StructuredLabels_unittest.cc @@ -29,15 +29,15 @@ TEST(StructuredLabels, add_label) EXPECT_EQ(3, l->get_num_labels()); - real_number = CRealNumber::obtain_from_generic(l->get_label(0)); + real_number = l->get_label(0)->as(); EXPECT_EQ(3, real_number->value); SG_UNREF(real_number); - real_number = CRealNumber::obtain_from_generic(l->get_label(1)); + real_number = l->get_label(1)->as(); EXPECT_EQ(7, real_number->value); SG_UNREF(real_number); - real_number = CRealNumber::obtain_from_generic(l->get_label(2)); + real_number = l->get_label(2)->as(); EXPECT_EQ(13, real_number->value); SG_UNREF(real_number); @@ -59,15 +59,15 @@ TEST(StructuredLabels, set_label) EXPECT_EQ(3, l->get_num_labels()); - real_number = CRealNumber::obtain_from_generic(l->get_label(0)); + real_number = l->get_label(0)->as(); EXPECT_EQ(3, real_number->value); SG_UNREF(real_number); - real_number = CRealNumber::obtain_from_generic(l->get_label(1)); + real_number = l->get_label(1)->as(); EXPECT_EQ(23, real_number->value); SG_UNREF(real_number); - real_number = CRealNumber::obtain_from_generic(l->get_label(2)); + real_number = l->get_label(2)->as(); EXPECT_EQ(13, real_number->value); SG_UNREF(real_number); diff --git a/tests/unit/structure/DualLibQPBMSOSVM_unittest.cc b/tests/unit/structure/DualLibQPBMSOSVM_unittest.cc index 4b54498c4a0..fbe06142dc0 100644 --- a/tests/unit/structure/DualLibQPBMSOSVM_unittest.cc +++ b/tests/unit/structure/DualLibQPBMSOSVM_unittest.cc @@ -124,7 +124,7 @@ TEST_P(DualLibQPBMSOSVMTestLoopSolvers,train_small_problem_and_predict) for (int32_t i=0; iget_label(i) ); + CRealNumber* rn = out->get_label(i)->as(); error+=(rn->value==labs.get_element(i)) ? 0.0 : 1.0; SG_UNREF(rn); } diff --git a/tests/unit/structure/HashedMultilabelModel_unittest.cc b/tests/unit/structure/HashedMultilabelModel_unittest.cc index f53cef3b0ab..49508facc2d 100644 --- a/tests/unit/structure/HashedMultilabelModel_unittest.cc +++ b/tests/unit/structure/HashedMultilabelModel_unittest.cc @@ -193,8 +193,7 @@ TEST(HashedMultilabelModel, argmax) CResultSet * ret_1 = model->argmax(w, 0, true); - CSparseMultilabel * y_1 = CSparseMultilabel::obtain_from_generic( - ret_1->argmax); + CSparseMultilabel * y_1 = ret_1->argmax->as(); SGVector slabel_1 = y_1->get_data(); @@ -229,8 +228,7 @@ TEST(HashedMultilabelModel, argmax) CResultSet * ret_2 = model->argmax(w, 0, false); - CSparseMultilabel * y_2 = CSparseMultilabel::obtain_from_generic( - ret_2->argmax); + CSparseMultilabel * y_2 = ret_2->argmax->as(); SGVector slabel_2 = y_2->get_data(); for (index_t i = 0; i < slabel_2.vlen; i++) diff --git a/tests/unit/structure/HierarchicalMultilabelModel_unittest.cc b/tests/unit/structure/HierarchicalMultilabelModel_unittest.cc index faa744330bd..cf46df73501 100644 --- a/tests/unit/structure/HierarchicalMultilabelModel_unittest.cc +++ b/tests/unit/structure/HierarchicalMultilabelModel_unittest.cc @@ -246,8 +246,7 @@ TEST(HierarchicalMultilabelModel, argmax) CResultSet * ret_1 = model->argmax(w, 0, true); - CSparseMultilabel * y_1 = CSparseMultilabel::obtain_from_generic( - ret_1->argmax); + CSparseMultilabel * y_1 = ret_1->argmax->as(); SGVector slabel_1 = y_1->get_data(); for (index_t i = 0; i < slabel_1.vlen; i++) @@ -275,8 +274,7 @@ TEST(HierarchicalMultilabelModel, argmax) CResultSet * ret_2 = model->argmax(w, 0, false); - CSparseMultilabel * y_2 = CSparseMultilabel::obtain_from_generic( - ret_2->argmax); + CSparseMultilabel * y_2 = ret_2->argmax->as(); SGVector slabel_2 = y_2->get_data(); for (index_t i = 0; i < slabel_2.vlen; i++) @@ -357,8 +355,7 @@ TEST(HierarchicalMultilabelModel, argmax_leaf_nodes_mandatory) CResultSet * ret_1 = model->argmax(w, 0, true); - CSparseMultilabel * y_1 = CSparseMultilabel::obtain_from_generic( - ret_1->argmax); + CSparseMultilabel * y_1 = ret_1->argmax->as(); SGVector slabel_1 = y_1->get_data(); for (index_t i = 0; i < slabel_1.vlen; i++) @@ -382,8 +379,7 @@ TEST(HierarchicalMultilabelModel, argmax_leaf_nodes_mandatory) CResultSet * ret_2 = model->argmax(w, 0, false); - CSparseMultilabel * y_2 = CSparseMultilabel::obtain_from_generic( - ret_2->argmax); + CSparseMultilabel * y_2 = ret_2->argmax->as(); SGVector slabel_2 = y_2->get_data(); for (index_t i = 0; i < slabel_2.vlen; i++) diff --git a/tests/unit/structure/MultilabelCLRModel_unittest.cc b/tests/unit/structure/MultilabelCLRModel_unittest.cc index 71e97666688..58f6ef00243 100644 --- a/tests/unit/structure/MultilabelCLRModel_unittest.cc +++ b/tests/unit/structure/MultilabelCLRModel_unittest.cc @@ -208,8 +208,7 @@ TEST(MultilabelCLRModel, argmax) CResultSet * ret_1 = model->argmax(w, 0, true); - CSparseMultilabel * y_1 = CSparseMultilabel::obtain_from_generic( - ret_1->argmax); + CSparseMultilabel * y_1 = ret_1->argmax->as(); SGVector slabel_1 = y_1->get_data(); // calibrated/virtual label is considered to be last label @@ -237,8 +236,7 @@ TEST(MultilabelCLRModel, argmax) CResultSet * ret_2 = model->argmax(w, 0, false); - CSparseMultilabel * y_2 = CSparseMultilabel::obtain_from_generic( - ret_2->argmax); + CSparseMultilabel * y_2 = ret_2->argmax->as(); SGVector slabel_2 = y_2->get_data(); for (index_t i = 0; i < labels->get_num_classes(); i++) diff --git a/tests/unit/structure/MultilabelModel_unittest.cc b/tests/unit/structure/MultilabelModel_unittest.cc index 7b9de735c54..bad829649dc 100644 --- a/tests/unit/structure/MultilabelModel_unittest.cc +++ b/tests/unit/structure/MultilabelModel_unittest.cc @@ -185,8 +185,7 @@ TEST(MultilabelModel, argmax) y_2_expected[0] = 0; y_2_expected[1] = 1; - CSparseMultilabel * y_1 = CSparseMultilabel::obtain_from_generic( - ret_1->argmax); + CSparseMultilabel * y_1 = ret_1->argmax->as(); SGVector slabel_1 = y_1->get_data(); SGVector psi_truth_1 = ret_1->psi_truth; @@ -210,8 +209,7 @@ TEST(MultilabelModel, argmax) EXPECT_EQ(ret_1->delta, 1); - CSparseMultilabel * y_2 = CSparseMultilabel::obtain_from_generic( - ret_2->argmax); + CSparseMultilabel * y_2 = ret_2->argmax->as(); SGVector slabel_2 = y_2->get_data(); SGVector psi_truth_2 = ret_2->psi_truth; @@ -238,8 +236,7 @@ TEST(MultilabelModel, argmax) CResultSet * ret_3 = model->argmax(w, 0, false); CResultSet * ret_4 = model->argmax(w, 1, false); - CSparseMultilabel * y_3 = CSparseMultilabel::obtain_from_generic( - ret_3->argmax); + CSparseMultilabel * y_3 = ret_3->argmax->as(); SGVector slabel_3 = y_3->get_data(); SGVector psi_pred_3 = ret_3->psi_pred; @@ -261,8 +258,7 @@ TEST(MultilabelModel, argmax) } } - CSparseMultilabel * y_4 = CSparseMultilabel::obtain_from_generic( - ret_4->argmax); + CSparseMultilabel * y_4 = ret_4->argmax->as(); SGVector slabel_4 = y_4->get_data(); SGVector psi_pred_4 = ret_4->psi_pred; diff --git a/tests/unit/structure/MultilabelSOLabels_unittest.cc b/tests/unit/structure/MultilabelSOLabels_unittest.cc index ba1595dd255..b324368a135 100644 --- a/tests/unit/structure/MultilabelSOLabels_unittest.cc +++ b/tests/unit/structure/MultilabelSOLabels_unittest.cc @@ -61,8 +61,7 @@ TEST(MultilabelSOLabels, set_sparse_label) lab[1] = 1; ml->set_sparse_label(0, lab); - CSparseMultilabel * slabel = CSparseMultilabel::obtain_from_generic( - ml->get_label(0)); + CSparseMultilabel * slabel = ml->get_label(0)->as(); SGVector slabel_data = slabel->get_data(); for (int i = 0; i < slabel_data.vlen; i++) @@ -90,8 +89,7 @@ TEST(MultilabelSOLabels, set_label) SG_REF(slabel); ml->set_label(0, slabel); - CSparseMultilabel * slabel_out = CSparseMultilabel::obtain_from_generic( - ml->get_label(0)); + CSparseMultilabel * slabel_out = ml->get_label(0)->as(); SGVector slabel_data = slabel_out->get_data(); for (index_t i = 0; i < slabel_data.vlen; i++) @@ -127,7 +125,7 @@ TEST(MultilabelSOLabels, set_sparse_labels) for (int i = 0; i < ml->get_num_labels(); i++) { - CSparseMultilabel * slabel = CSparseMultilabel::obtain_from_generic(ml->get_label(i)); + CSparseMultilabel * slabel = ml->get_label(i)->as(); SGVector slabel_data = slabel->get_data(); SGVector lab = labels[i]; EXPECT_EQ(slabel_data.vlen, lab.vlen); @@ -167,7 +165,7 @@ TEST(MultilabelSOLabels, to_dense) for (int i = 0; i < ml->get_num_labels(); i++) { - CSparseMultilabel * slabel = CSparseMultilabel::obtain_from_generic(ml->get_label(0)); + CSparseMultilabel * slabel = ml->get_label(0)->as(); SGVector slabel_dense_data = CMultilabelSOLabels::to_dense(slabel, ml->get_num_classes(), 1, 0); SG_UNREF(slabel); EXPECT_EQ(slabel_dense_data.vlen, ml->get_num_classes());