From c476c6097171f5cded248ec883548371d01dfe15 Mon Sep 17 00:00:00 2001
From: Manuel Guenther <manuel.guenther@idiap.ch>
Date: Fri, 24 Oct 2014 21:22:19 +0200
Subject: [PATCH] Switched to new bob.core.random API

---
 bob/learn/misc/cpp/IVectorTrainer.cpp         |  1 -
 bob/learn/misc/cpp/KMeansTrainer.cpp          | 24 +++++++------------
 bob/learn/misc/cpp/PLDATrainer.cpp            |  1 -
 .../include/bob.learn.misc/IVectorTrainer.h   |  1 -
 bob/learn/misc/old/ivector_trainer.cc         |  2 +-
 bob/learn/misc/old/jfa_trainer.cc             |  2 +-
 bob/learn/misc/old/kmeans_trainer.cc          |  2 +-
 bob/learn/misc/old/main.cc                    |  2 +-
 bob/learn/misc/old/plda_trainer.cc            |  2 +-
 9 files changed, 13 insertions(+), 24 deletions(-)

diff --git a/bob/learn/misc/cpp/IVectorTrainer.cpp b/bob/learn/misc/cpp/IVectorTrainer.cpp
index be843b2..4f929af 100644
--- a/bob/learn/misc/cpp/IVectorTrainer.cpp
+++ b/bob/learn/misc/cpp/IVectorTrainer.cpp
@@ -15,7 +15,6 @@
 #include <bob.math/linear.h>
 #include <bob.math/linsolve.h>
 #include <boost/shared_ptr.hpp>
-#include <boost/random.hpp>
 
 bob::learn::misc::IVectorTrainer::IVectorTrainer(const bool update_sigma,
     const double convergence_threshold,
diff --git a/bob/learn/misc/cpp/KMeansTrainer.cpp b/bob/learn/misc/cpp/KMeansTrainer.cpp
index ae69ee7..092c87d 100644
--- a/bob/learn/misc/cpp/KMeansTrainer.cpp
+++ b/bob/learn/misc/cpp/KMeansTrainer.cpp
@@ -8,11 +8,9 @@
 
 #include <bob.learn.misc/KMeansTrainer.h>
 #include <bob.core/array_copy.h>
-#include <boost/random.hpp>
+#include <bob.core/random.h>
 
-#if BOOST_VERSION >= 104700
-#include <boost/random/discrete_distribution.hpp>
-#endif
+#include <boost/random.hpp>
 
 bob::learn::misc::KMeansTrainer::KMeansTrainer(double convergence_threshold,
     size_t max_iterations, bool compute_likelihood, InitializationMethod i_m):
@@ -71,9 +69,7 @@ void bob::learn::misc::KMeansTrainer::initialize(bob::learn::misc::KMeansMachine
 
   // assign the i'th mean to a random example within the i'th chunk
   blitz::Range a = blitz::Range::all();
-#if BOOST_VERSION >= 104700
   if(m_initialization_method == RANDOM || m_initialization_method == RANDOM_NO_DUPLICATE) // Random initialization
-#endif
   {
     unsigned int n_chunk = n_data / kmeans.getNMeans();
     size_t n_max_trials = (size_t)n_chunk * 5;
@@ -83,11 +79,10 @@ void bob::learn::misc::KMeansTrainer::initialize(bob::learn::misc::KMeansMachine
 
     for(size_t i=0; i<kmeans.getNMeans(); ++i)
     {
-      boost::uniform_int<> range(i*n_chunk, (i+1)*n_chunk-1);
-      boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(*m_rng, range);
+      boost::uniform_int<> die(i*n_chunk, (i+1)*n_chunk-1);
 
       // get random index within chunk
-      unsigned int index = die();
+      unsigned int index = die(*m_rng);
 
       // get the example at that index
       blitz::Array<double, 1> mean = ar(index,a);
@@ -110,7 +105,7 @@ void bob::learn::misc::KMeansTrainer::initialize(bob::learn::misc::KMeansMachine
             break;
           else
           {
-            index = die();
+            index = die(*m_rng);
             mean = ar(index,a);
             ++count;
           }
@@ -127,14 +122,12 @@ void bob::learn::misc::KMeansTrainer::initialize(bob::learn::misc::KMeansMachine
       kmeans.setMean(i, mean);
     }
   }
-#if BOOST_VERSION >= 104700
   else // K-Means++
   {
     // 1.a. Selects one sample randomly
-    boost::uniform_int<> range(0, n_data-1);
-    boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(*m_rng, range);
+    boost::uniform_int<> die(0, n_data-1);
     //   Gets the example at a random index
-    blitz::Array<double,1> mean = ar(die(),a);
+    blitz::Array<double,1> mean = ar(die(*m_rng),a);
     kmeans.setMean(0, mean);
 
     // 1.b. Loops, computes probability distribution and select samples accordingly
@@ -160,12 +153,11 @@ void bob::learn::misc::KMeansTrainer::initialize(bob::learn::misc::KMeansMachine
       // Takes a sample according to the weights distribution
       // Blitz iterators is fine as the weights array should be C-style contiguous
       bob::core::array::assertCContiguous(weights);
-      boost::random::discrete_distribution<> die2(weights.begin(), weights.end());
+      bob::core::random::discrete_distribution<> die2(weights.begin(), weights.end());
       blitz::Array<double,1> new_mean = ar(die2(*m_rng),a);
       kmeans.setMean(m, new_mean);
     }
   }
-#endif
    // Resize the accumulator
   m_zeroethOrderStats.resize(kmeans.getNMeans());
   m_firstOrderStats.resize(kmeans.getNMeans(), kmeans.getNInputs());
diff --git a/bob/learn/misc/cpp/PLDATrainer.cpp b/bob/learn/misc/cpp/PLDATrainer.cpp
index 2c687f3..725dd45 100644
--- a/bob/learn/misc/cpp/PLDATrainer.cpp
+++ b/bob/learn/misc/cpp/PLDATrainer.cpp
@@ -14,7 +14,6 @@
 #include <bob.math/inv.h>
 #include <bob.math/svd.h>
 #include <algorithm>
-#include <boost/random.hpp>
 #include <vector>
 #include <limits>
 
diff --git a/bob/learn/misc/include/bob.learn.misc/IVectorTrainer.h b/bob/learn/misc/include/bob.learn.misc/IVectorTrainer.h
index 91f28ac..f3e8225 100644
--- a/bob/learn/misc/include/bob.learn.misc/IVectorTrainer.h
+++ b/bob/learn/misc/include/bob.learn.misc/IVectorTrainer.h
@@ -13,7 +13,6 @@
 #include <bob.learn.misc/IVectorMachine.h>
 #include <bob.learn.misc/GMMStats.h>
 #include <boost/shared_ptr.hpp>
-#include <boost/random.hpp>
 #include <vector>
 
 namespace bob { namespace learn { namespace misc {
diff --git a/bob/learn/misc/old/ivector_trainer.cc b/bob/learn/misc/old/ivector_trainer.cc
index 8b964a8..72328bd 100644
--- a/bob/learn/misc/old/ivector_trainer.cc
+++ b/bob/learn/misc/old/ivector_trainer.cc
@@ -83,7 +83,7 @@ static void py_set_AccSnormij(bob::learn::misc::IVectorTrainer& trainer,
 
 
 // include the random API of bob.core
-#include <bob.core/random.h>
+#include <bob.core/random_api.h>
 static boost::python::object ITB_getRng(EMTrainerIVectorBase& self){
   // create new object
   PyObject* o = PyBoostMt19937_Type.tp_alloc(&PyBoostMt19937_Type,0);
diff --git a/bob/learn/misc/old/jfa_trainer.cc b/bob/learn/misc/old/jfa_trainer.cc
index a5966e2..542c33a 100644
--- a/bob/learn/misc/old/jfa_trainer.cc
+++ b/bob/learn/misc/old/jfa_trainer.cc
@@ -311,7 +311,7 @@ static void jfa_set_accDA2(bob::learn::misc::JFATrainer& trainer,
 
 
 // include the random API of bob.core
-#include <bob.core/random.h>
+#include <bob.core/random_api.h>
 static boost::python::object isv_getRng(bob::learn::misc::ISVTrainer& self){
   // create new object
   PyObject* o = PyBoostMt19937_Type.tp_alloc(&PyBoostMt19937_Type,0);
diff --git a/bob/learn/misc/old/kmeans_trainer.cc b/bob/learn/misc/old/kmeans_trainer.cc
index 4ef008b..0b90db7 100644
--- a/bob/learn/misc/old/kmeans_trainer.cc
+++ b/bob/learn/misc/old/kmeans_trainer.cc
@@ -57,7 +57,7 @@ static void py_mStep(EMTrainerKMeansBase& trainer,
 }
 
 // include the random API of bob.core
-#include <bob.core/random.h>
+#include <bob.core/random_api.h>
 static boost::python::object KMTB_getRng(EMTrainerKMeansBase& self){
   // create new object
   PyObject* o = PyBoostMt19937_Type.tp_alloc(&PyBoostMt19937_Type,0);
diff --git a/bob/learn/misc/old/main.cc b/bob/learn/misc/old/main.cc
index c8a4834..16f7f9b 100644
--- a/bob/learn/misc/old/main.cc
+++ b/bob/learn/misc/old/main.cc
@@ -14,7 +14,7 @@
 #include <bob.blitz/capi.h>
 #include <bob.blitz/cleanup.h>
 #include <bob.io.base/api.h>
-#include <bob.core/random.h>
+#include <bob.core/random_api.h>
 
 #include "ndarray.h"
 
diff --git a/bob/learn/misc/old/plda_trainer.cc b/bob/learn/misc/old/plda_trainer.cc
index a9a9de3..c684444 100644
--- a/bob/learn/misc/old/plda_trainer.cc
+++ b/bob/learn/misc/old/plda_trainer.cc
@@ -93,7 +93,7 @@ static object get_z_second_order(bob::learn::misc::PLDATrainer& m) {
 
 
 // include the random API of bob.core
-#include <bob.core/random.h>
+#include <bob.core/random_api.h>
 static boost::python::object TB_getRng(EMTrainerPLDA& self){
   // create new object
   PyObject* o = PyBoostMt19937_Type.tp_alloc(&PyBoostMt19937_Type,0);
-- 
GitLab