From 6b0b174175dcccd1387fcbb0679175ffb13fe7d9 Mon Sep 17 00:00:00 2001
From: Thomas <purcell@fhi-berlin.mpg.de>
Date: Wed, 15 Sep 2021 18:54:18 +0200
Subject: [PATCH] Make a proper copy function for SVMWrapper

Minor changes to LossFunctionConvexHull as a result (score for inds *= n_class * n_samp)
---
 src/classification/SVMWrapper.cpp            | 23 ++++++++++++++++++++
 src/classification/SVMWrapper.hpp            |  4 ++--
 src/loss_function/LossFunctionConvexHull.cpp |  2 +-
 3 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/src/classification/SVMWrapper.cpp b/src/classification/SVMWrapper.cpp
index 7a0c98a8..271c7be3 100644
--- a/src/classification/SVMWrapper.cpp
+++ b/src/classification/SVMWrapper.cpp
@@ -64,6 +64,29 @@ SVMWrapper::SVMWrapper(const double C, const int n_class, const int n_dim, const
     SVMWrapper(C, n_class, n_dim, prop.size(), prop.data())
 {}
 
+SVMWrapper::SVMWrapper(const SVMWrapper& o):
+    _model(nullptr),
+    _y(o._y),
+    _y_est(o._y_est),
+    _coefs(o._coefs),
+    _intercept(o._intercept),
+    _w_remap(o._w_remap),
+    _b_remap(o._b_remap),
+    _map_prop_vals(o._map_prop_vals),
+    _C(o._C),
+    _n_dim(o._n_dim),
+    _n_samp(o._n_samp),
+    _n_class(o._n_class),
+    _n_misclassified(o._n_misclassified)
+{
+    setup_parameter_obj(_C);
+    setup_x_space();
+
+    _prob.l = _n_samp;
+    _prob.y = _y.data();
+    _prob.x = _x.data();
+}
+
 SVMWrapper::~SVMWrapper()
 {
     svm_destroy_param(&_param);
diff --git a/src/classification/SVMWrapper.hpp b/src/classification/SVMWrapper.hpp
index 8f412797..038dc345 100644
--- a/src/classification/SVMWrapper.hpp
+++ b/src/classification/SVMWrapper.hpp
@@ -106,14 +106,14 @@ public:
      *
      * @param o The object to be copied
      */
-    SVMWrapper(const SVMWrapper& o) = default;
+    SVMWrapper(const SVMWrapper& o);
 
     /**
      * @brief The move constructor
      *
      * @param o The object to be moved
      */
-    SVMWrapper(SVMWrapper&& o) = default;
+    SVMWrapper(SVMWrapper&& o) = delete;
 
     /**
      * @brief The destructor for the SVMWrapper
diff --git a/src/loss_function/LossFunctionConvexHull.cpp b/src/loss_function/LossFunctionConvexHull.cpp
index 01ab3fe0..6327408d 100644
--- a/src/loss_function/LossFunctionConvexHull.cpp
+++ b/src/loss_function/LossFunctionConvexHull.cpp
@@ -261,7 +261,7 @@ double LossFunctionConvexHull::operator()(const std::vector<int>& inds)
     {
         n_convex_overlap += static_cast<double>(lp.get_n_overlap(inds));
     }
-    return n_convex_overlap;
+    return n_convex_overlap * _n_samp * _n_class;
 }
 
 double LossFunctionConvexHull::operator()(const std::vector<model_node_ptr>& feats)
-- 
GitLab