From 243367ac50764b7a68cc25b733287533c76e55fb Mon Sep 17 00:00:00 2001
From: Yannick DAYER <yannick.dayer@idiap.ch>
Date: Mon, 29 Nov 2021 11:45:23 +0100
Subject: [PATCH] Use `resource_filename` instead of `datafile`

---
 bob/learn/em/data/gmm_MAP.hdf5 | Bin 41136 -> 12920 bytes
 bob/learn/em/test/test_gmm.py  | 154 ++++++++++++++++-----------------
 2 files changed, 76 insertions(+), 78 deletions(-)

diff --git a/bob/learn/em/data/gmm_MAP.hdf5 b/bob/learn/em/data/gmm_MAP.hdf5
index 91c5e69141e3042ef5d211fc4098a8d59649d62d..0f57a2bde913bba76c2d9ab5a07cf81b07346d0f 100644
GIT binary patch
literal 12920
zcmeD5aB<`1lHy_j0S*oZ76t(j3y%LoL4^@S2+I8r;W02IKpBisx&unDV1h6h89<PM
zK?1^M5QLhKt}Z0V)s=yPi2-IljD~7sFkpeO6d)9Xh6aSu0HH?7VIBe=u8sj9FD5_}
z+654Yfq|hx3&H@UGLRH{I(wiEk++b9(4>-#3~US_b0Gu+10w?m*a)x~0|Nsyg9KPg
zl93UdvO&2AA_q~&%D@4ZXJP_V3>?s$zzj18tP5-;m=HoTziaK1L<R;}P60~~I1%jU
z@50Ey$^ecG1_p)~1j6+I)Ws*@<pD$hJzg>(!VEv8pbQ)oBvcs~6qs=+fC|IPi3(Pz
zz#yY&m#ze$Spbw05uP6G>56c82!Jz?00#p!hd6*ehsa+{;B1G;UkcE0fTb9)at6$B
zm;jL&p(H39fx;BzeNX_pJNx^9XjriXW`oN)kO~F{Lp=j91Dc%~biq6Z2AkxZ#NuKF
z^`!hHy`0p<qCCCST)o`PijvZzRK4`vTs?PRU*E*!jLf`Lbvq>UVCLlJKn;RY4g65X
zC^Z@aqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsK=lv+_2*&Z0ieD)2!kvk
zJU&D2IH(46sBUPDSHZ@kBS3+}z`$Sur6bVBLvvFT^NJZ57|IfhG86NXQ$cKyQW!tJ
zB%>&`I3qtN1tJ3*Z-E91NGVk?vGFIUU=JT(GvQ`1`41W(VqjpvJ<etUbt<88w!t-y
zO*lMA9dC3XG8_iycq3+bK!#5l86hbWRt~^u*t`en>BR#YPK5G%1y#~LxrShd2PAz%
zLIX7KqX8a|mS6(S2{AB$%1nqH2ZNiVPp~Tk14BqqD2M_pz@2|0py2`04Rfy$G#7$I
zyTJ26BPBc{heUY5;%TJNpnMNX;~@Wns)Uajk2|*hcw%<~Bmk=amR6^yPk&<HyOqPx
z@ZvRlMg|5`&4w&KEkTEa)ia7j{s%i$R!lg*%$LC-MJh^5(%##Fq4A0Roz|oF3>zLk
zeD}!F!Qu9wf}@O^>>C`^Po8+-0GZ!m*kA*(0T&IC9VJIYU^E0qLtr!nMnhmU1ZWTf
zkaa(7@P2Lw8-7bXpwb$UZUmHvNx^!B60(?b$RabK91S@r0|&JMDqf%oW#FJ->jpVw
za44XWF#Y-!QA4U7ots*c7@wAzlNw)^T2!2wp9c+puy}b<W=U#MJa~x-R6H*}J+ZX7
zI1@6u!oW~cl$e>9TEvi?pI4Szl%ATGoQfD)VPIg$O{|Dd%Pc9$%uA0iE=etbjJ7Z^
zl&5B<XOt8(loq5UmZZkRhHGGa*f0%DIZPa;jRDma;I1Cng@dJ+4_Q~sh;v=7fIir{
zu;o4w&L}xzLIATof-J0Nge<3H0QLJofq{!Ae;g<pT0TK3kR=QZSk~vkR)#_q(3pbM
zbIj1u7X}6fJ^U8JT%TcxUma|;D+0274!`1IAUkmBsu~(4PzoBBnB!^mO;-aK9<!kV
K0i^~>cmMz>03&?>

literal 41136
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

diff --git a/bob/learn/em/test/test_gmm.py b/bob/learn/em/test/test_gmm.py
index d69415d..89e96bf 100644
--- a/bob/learn/em/test/test_gmm.py
+++ b/bob/learn/em/test/test_gmm.py
@@ -15,9 +15,9 @@ import os
 import tempfile
 from copy import deepcopy
 from h5py import File as HDF5File
+from pkg_resources import resource_filename
 
-import bob.io.base
-from bob.io.base.test_utils import datafile
+from bob.io.base import load as load_array
 
 from bob.learn.em.mixture import GMMMachine
 from bob.learn.em.mixture import GMMStats
@@ -187,7 +187,7 @@ def test_GMMMachine_1():
 def test_GMMMachine_2():
   # Test a GMMMachine (statistics)
 
-  arrayset = bob.io.base.load(datafile("faithful.torch3_f64.hdf5", __name__, path="../data/"))
+  arrayset = load_array(resource_filename("bob.learn.em", "data/faithful.torch3_f64.hdf5"))
   gmm = GMMMachine(n_gaussians=2)
   gmm.weights   = np.array([0.5, 0.5], "float64")
   gmm.means     = np.array([[3, 70], [4, 72]], "float64")
@@ -197,7 +197,7 @@ def test_GMMMachine_2():
   stats = gmm.acc_statistics(arrayset)
 
   stats_ref = GMMStats(n_gaussians=2, n_features=2)
-  stats_ref.load(HDF5File(datafile("stats.hdf5",__name__, path="../data/"), "r"))
+  stats_ref.load(HDF5File(resource_filename("bob.learn.em", "data/stats.hdf5"), "r"))
 
   np.testing.assert_equal(stats.t, stats_ref.t)
   np.testing.assert_almost_equal(stats.n, stats_ref.n, decimal=10)
@@ -210,11 +210,11 @@ def test_GMMMachine_2():
 def test_GMMMachine_3():
   # Test a GMMMachine (log-likelihood computation)
 
-  data = bob.io.base.load(datafile("data.hdf5", __name__, path="../data/"))
+  data = load_array(resource_filename("bob.learn.em", "data/data.hdf5"))
   gmm = GMMMachine(n_gaussians=2)
-  gmm.weights   = bob.io.base.load(datafile("weights.hdf5", __name__, path="../data/"))
-  gmm.means     = bob.io.base.load(datafile("means.hdf5", __name__, path="../data/"))
-  gmm.variances = bob.io.base.load(datafile("variances.hdf5", __name__, path="../data/"))
+  gmm.weights   = load_array(resource_filename("bob.learn.em", "data/weights.hdf5"))
+  gmm.means     = load_array(resource_filename("bob.learn.em", "data/means.hdf5"))
+  gmm.variances = load_array(resource_filename("bob.learn.em", "data/variances.hdf5"))
 
   # Compare the log-likelihood with the one obtained using Chris Matlab
   # implementation
@@ -229,9 +229,9 @@ def test_GMMMachine_4():
   data = np.random.rand(100,50) # Doesn't matter if it is random. The average of 1D array (in python) MUST output the same result for the 2D array (in C++)
 
   gmm = GMMMachine(n_gaussians=2)
-  gmm.weights   = bob.io.base.load(datafile("weights.hdf5", __name__, path="../data/"))
-  gmm.means     = bob.io.base.load(datafile("means.hdf5", __name__, path="../data/"))
-  gmm.variances = bob.io.base.load(datafile("variances.hdf5", __name__, path="../data/"))
+  gmm.weights   = load_array(resource_filename("bob.learn.em", "data/weights.hdf5"))
+  gmm.means     = load_array(resource_filename("bob.learn.em", "data/means.hdf5"))
+  gmm.variances = load_array(resource_filename("bob.learn.em", "data/variances.hdf5"))
 
 
   ll = 0
@@ -549,9 +549,9 @@ def test_map_transformer():
 def loadGMM():
     gmm = GMMMachine(n_gaussians=2)
 
-    gmm.weights = bob.io.base.load(datafile("gmm.init_weights.hdf5", __name__, path="../data/"))
-    gmm.means = bob.io.base.load(datafile("gmm.init_means.hdf5", __name__, path="../data/"))
-    gmm.variances = bob.io.base.load(datafile("gmm.init_variances.hdf5", __name__, path="../data/"))
+    gmm.weights = load_array(resource_filename("bob.learn.em", "data/gmm.init_weights.hdf5"))
+    gmm.means = load_array(resource_filename("bob.learn.em", "data/gmm.init_means.hdf5"))
+    gmm.variances = load_array(resource_filename("bob.learn.em", "data/gmm.init_variances.hdf5"))
 
     return gmm
 
@@ -560,7 +560,7 @@ def equals(x, y, epsilon):
 
 def test_gmm_ML_1():
     """Trains a GMMMachine with ML_GMMTrainer"""
-    ar = bob.io.base.load(datafile("faithful.torch3_f64.hdf5", __name__, path="../data/"))
+    ar = load_array(resource_filename("bob.learn.em", "data/faithful.torch3_f64.hdf5"))
     gmm = loadGMM()
 
     # test rng handling
@@ -579,29 +579,29 @@ def test_gmm_ML_1():
     gmm = gmm.fit(ar)
 
     # Generate reference
-    # gmm.save(HDF5File(datafile("gmm_ML.hdf5", __name__, path="../data"), "w"))
+    # gmm.save(HDF5File(resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "w"))
 
-    gmm_ref = GMMMachine.from_hdf5(HDF5File(datafile("gmm_ML.hdf5", __name__, path="../data"), "r"))
+    gmm_ref = GMMMachine.from_hdf5(HDF5File(resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "r"))
     assert gmm == gmm_ref
 
 
 def test_gmm_ML_2():
     """Trains a GMMMachine with ML_GMMTrainer; compares to an old reference"""
-    ar = bob.io.base.load(datafile("dataNormalized.hdf5", __name__, path="../data/"))
+    ar = load_array(resource_filename("bob.learn.em", "data/dataNormalized.hdf5"))
 
     # Initialize GMMMachine
     gmm = GMMMachine(n_gaussians=5)
-    gmm.means = bob.io.base.load(datafile("meansAfterKMeans.hdf5", __name__, path="../data/")).astype("float64")
-    gmm.variances = bob.io.base.load(datafile("variancesAfterKMeans.hdf5", __name__, path="../data/")).astype("float64")
-    gmm.weights = np.exp(bob.io.base.load(datafile("weightsAfterKMeans.hdf5", __name__, path="../data/")).astype("float64"))
+    gmm.means = load_array(resource_filename("bob.learn.em", "data/meansAfterKMeans.hdf5")).astype("float64")
+    gmm.variances = load_array(resource_filename("bob.learn.em", "data/variancesAfterKMeans.hdf5")).astype("float64")
+    gmm.weights = np.exp(load_array(resource_filename("bob.learn.em", "data/weightsAfterKMeans.hdf5")).astype("float64"))
 
     threshold = 0.001
     gmm.variance_thresholds = threshold
 
     # Initialize ML Trainer
     gmm.mean_var_update_threshold = 0.001
-    gmm.max_fitting_steps = 26
-    gmm.convergence_threshold = 0.00001
+    gmm.max_fitting_steps = 25
+    gmm.convergence_threshold = 0.000001
     gmm.update_means = True
     gmm.update_variances = True
     gmm.update_weights = True
@@ -610,26 +610,26 @@ def test_gmm_ML_2():
     gmm = gmm.fit(ar)
     # Test results
     # Load torch3vision reference
-    meansML_ref = bob.io.base.load(datafile("meansAfterML.hdf5", __name__, path="../data/"))
-    variancesML_ref = bob.io.base.load(datafile("variancesAfterML.hdf5", __name__, path="../data/"))
-    weightsML_ref = bob.io.base.load(datafile("weightsAfterML.hdf5", __name__, path="../data/"))
+    meansML_ref = load_array(resource_filename("bob.learn.em", "data/meansAfterML.hdf5"))
+    variancesML_ref = load_array(resource_filename("bob.learn.em", "data/variancesAfterML.hdf5"))
+    weightsML_ref = load_array(resource_filename("bob.learn.em", "data/weightsAfterML.hdf5"))
 
     # Compare to current results
-    np.testing.assert_allclose(gmm.means, meansML_ref, rtol=3e-3)
-    np.testing.assert_allclose(gmm.variances, variancesML_ref, rtol=3e-3)
-    np.testing.assert_allclose(gmm.weights, weightsML_ref, rtol=1e-4)
+    np.testing.assert_allclose(gmm.means, meansML_ref, atol=3e-3)
+    np.testing.assert_allclose(gmm.variances, variancesML_ref, atol=3e-3)
+    np.testing.assert_allclose(gmm.weights, weightsML_ref, atol=1e-4)
 
 
 def test_gmm_ML_parallel():
     """Trains a GMMMachine with ML_GMMTrainer; compares to an old reference"""
 
-    ar = da.array(bob.io.base.load(datafile("dataNormalized.hdf5", __name__, path="../data/")))
+    ar = da.array(load_array(resource_filename("bob.learn.em", "data/dataNormalized.hdf5")))
 
     # Initialize GMMMachine
     gmm = GMMMachine(n_gaussians=5)
-    gmm.means = bob.io.base.load(datafile("meansAfterKMeans.hdf5", __name__, path="../data/")).astype("float64")
-    gmm.variances = bob.io.base.load(datafile("variancesAfterKMeans.hdf5", __name__, path="../data/")).astype("float64")
-    gmm.weights = np.exp(bob.io.base.load(datafile("weightsAfterKMeans.hdf5", __name__, path="../data/")).astype("float64"))
+    gmm.means = load_array(resource_filename("bob.learn.em", "data/meansAfterKMeans.hdf5")).astype("float64")
+    gmm.variances = load_array(resource_filename("bob.learn.em", "data/variancesAfterKMeans.hdf5")).astype("float64")
+    gmm.weights = np.exp(load_array(resource_filename("bob.learn.em", "data/weightsAfterKMeans.hdf5")).astype("float64"))
 
     threshold = 0.001
     gmm.variance_thresholds = threshold
@@ -647,24 +647,24 @@ def test_gmm_ML_parallel():
 
     # Test results
     # Load torch3vision reference
-    meansML_ref = bob.io.base.load(datafile("meansAfterML.hdf5", __name__, path="../data/"))
-    variancesML_ref = bob.io.base.load(datafile("variancesAfterML.hdf5", __name__, path="../data/"))
-    weightsML_ref = bob.io.base.load(datafile("weightsAfterML.hdf5", __name__, path="../data/"))
+    meansML_ref = load_array(resource_filename("bob.learn.em", "data/meansAfterML.hdf5"))
+    variancesML_ref = load_array(resource_filename("bob.learn.em", "data/variancesAfterML.hdf5"))
+    weightsML_ref = load_array(resource_filename("bob.learn.em", "data/weightsAfterML.hdf5"))
 
     # Compare to current results
-    np.testing.assert_allclose(gmm.means, meansML_ref, rtol=3e-3)
-    np.testing.assert_allclose(gmm.variances, variancesML_ref, rtol=3e-3)
-    np.testing.assert_allclose(gmm.weights, weightsML_ref, rtol=1e-4)
+    np.testing.assert_allclose(gmm.means, meansML_ref, atol=3e-3)
+    np.testing.assert_allclose(gmm.variances, variancesML_ref, atol=3e-3)
+    np.testing.assert_allclose(gmm.weights, weightsML_ref, atol=1e-4)
 
 
 
 def test_gmm_MAP_1():
     """Train a GMMMachine with MAP_GMMTrainer"""
-    ar = bob.io.base.load(datafile("faithful.torch3_f64.hdf5", __name__, path="../data/"))
+    ar = load_array(resource_filename("bob.learn.em", "data/faithful.torch3_f64.hdf5"))
 
     # test with rng
-    gmmprior = GMMMachine.from_hdf5(HDF5File(datafile("gmm_ML.hdf5", __name__, path="../data/"), "r"))
-    gmm = GMMMachine.from_hdf5(HDF5File(datafile("gmm_ML.hdf5", __name__, path="../data/"), "r"), ubm = gmmprior)
+    gmmprior = GMMMachine.from_hdf5(HDF5File(resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "r"))
+    gmm = GMMMachine.from_hdf5(HDF5File(resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "r"), ubm = gmmprior)
     gmm.update_means = True
     gmm.update_variances = False
     gmm.update_weights = False
@@ -672,37 +672,38 @@ def test_gmm_MAP_1():
     gmm.random_state = rng
     gmm = gmm.fit(ar)
 
-    gmmprior = GMMMachine.from_hdf5(HDF5File(datafile("gmm_ML.hdf5", __name__, path="../data/"), "r"))
-    gmm = GMMMachine.from_hdf5(HDF5File(datafile("gmm_ML.hdf5", __name__, path="../data/"), "r"), ubm = gmmprior)
+    gmmprior = GMMMachine.from_hdf5(HDF5File(resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "r"))
+    gmm = GMMMachine.from_hdf5(HDF5File(resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "r"), ubm = gmmprior)
     gmm.update_means = True
     gmm.update_variances = False
     gmm.update_weights = False
 
     gmm = gmm.fit(ar)
 
-    gmm_ref = GMMMachine.from_hdf5(HDF5File(datafile("gmm_MAP.hdf5", __name__, path="../data/"), "r"))
+    # Generate reference
+    # gmm.save(HDF5File(resource_filename("bob.learn.em", "data/gmm_MAP.hdf5"), "w"))
+
+    gmm_ref = GMMMachine.from_hdf5(HDF5File(resource_filename("bob.learn.em", "data/gmm_MAP.hdf5"), "r"))
 
-    np.testing.assert_allclose(gmm.means, gmm_ref.means, rtol=1e-3)
-    np.testing.assert_allclose(gmm.variances, gmm_ref.variances, rtol=1e-3)
-    np.testing.assert_allclose(gmm.weights, gmm_ref.weights, rtol=1e-3)
+    np.testing.assert_almost_equal(gmm.means, gmm_ref.means, decimal=3)
+    np.testing.assert_almost_equal(gmm.variances, gmm_ref.variances, decimal=3)
+    np.testing.assert_almost_equal(gmm.weights, gmm_ref.weights, decimal=3)
 
 
 def test_gmm_MAP_2():
     """Train a GMMMachine with MAP_GMMTrainer and compare with matlab reference"""
 
-    data = bob.io.base.load(datafile("data.hdf5", __name__, path="../data/"))
-    data = data.reshape((-1, 1))  # make a 2D array out of it
-    means = bob.io.base.load(datafile("means.hdf5", __name__, path="../data/"))
-    variances = bob.io.base.load(datafile("variances.hdf5", __name__, path="../data/"))
-    weights = bob.io.base.load(datafile("weights.hdf5", __name__, path="../data/"))
+    data = load_array(resource_filename("bob.learn.em", "data/data.hdf5"))
+    data = data.reshape((1, -1))  # make a 2D array out of it
+    means = load_array(resource_filename("bob.learn.em", "data/means.hdf5"))
+    variances = load_array(resource_filename("bob.learn.em", "data/variances.hdf5"))
+    weights = load_array(resource_filename("bob.learn.em", "data/weights.hdf5"))
 
     gmm = GMMMachine(n_gaussians=2)
     gmm.means = means
     gmm.variances = variances
     gmm.weights = weights
 
-    gmm = gmm.fit(data)
-
     gmm_adapted = GMMMachine(
         n_gaussians=2,
         trainer="map",
@@ -717,38 +718,36 @@ def test_gmm_MAP_2():
     gmm_adapted.variances = variances
     gmm_adapted.weights = weights
 
-
     gmm_adapted = gmm_adapted.fit(data)
 
-    new_means = bob.io.base.load(datafile("new_adapted_mean.hdf5", __name__, path="../data/"))
+    new_means = load_array(resource_filename("bob.learn.em", "data/new_adapted_mean.hdf5"))
 
     # Compare to matlab reference
-    np.testing.assert_allclose(new_means[0,:], gmm_adapted.means[:,0], rtol=1e-4)
-    np.testing.assert_allclose(new_means[1,:], gmm_adapted.means[:,1], rtol=1e-4)
+    np.testing.assert_allclose(new_means.T, gmm_adapted.means, rtol=1e-4)
 
 
 def test_gmm_MAP_3():
     """Train a GMMMachine with MAP_GMMTrainer; compares to old reference"""
-    ar = bob.io.base.load(datafile("dataforMAP.hdf5", __name__, path="../data/"))
+    ar = load_array(resource_filename("bob.learn.em", "data/dataforMAP.hdf5"))
 
     # Initialize GMMMachine
     n_gaussians = 5
     prior_gmm = GMMMachine(n_gaussians)
-    prior_gmm.means = bob.io.base.load(datafile("meansAfterML.hdf5", __name__, path="../data/"))
-    prior_gmm.variances = bob.io.base.load(datafile("variancesAfterML.hdf5", __name__, path="../data/"))
-    prior_gmm.weights = bob.io.base.load(datafile("weightsAfterML.hdf5", __name__, path="../data/"))
+    prior_gmm.means = load_array(resource_filename("bob.learn.em", "data/meansAfterML.hdf5"))
+    prior_gmm.variances = load_array(resource_filename("bob.learn.em", "data/variancesAfterML.hdf5"))
+    prior_gmm.weights = load_array(resource_filename("bob.learn.em", "data/weightsAfterML.hdf5"))
 
     threshold = 0.001
     prior_gmm.variance_thresholds = threshold
 
     # Initialize MAP Trainer
+    prior = 0.001
     accuracy = 0.00001
-
     gmm = GMMMachine(
         n_gaussians,
         trainer="map",
         ubm=prior_gmm,
-        convergence_threshold=threshold,
+        convergence_threshold=prior,
         max_fitting_steps=1,
         update_means=True,
         update_variances=False,
@@ -762,32 +761,31 @@ def test_gmm_MAP_3():
 
     # Test results
     # Load torch3vision reference
-    meansMAP_ref = bob.io.base.load(datafile("meansAfterMAP.hdf5", __name__, path="../data/"))
-    variancesMAP_ref = bob.io.base.load(datafile("variancesAfterMAP.hdf5", __name__, path="../data/"))
-    weightsMAP_ref = bob.io.base.load(datafile("weightsAfterMAP.hdf5", __name__, path="../data/"))
+    meansMAP_ref = load_array(resource_filename("bob.learn.em", "data/meansAfterMAP.hdf5"))
+    variancesMAP_ref = load_array(resource_filename("bob.learn.em", "data/variancesAfterMAP.hdf5"))
+    weightsMAP_ref = load_array(resource_filename("bob.learn.em", "data/weightsAfterMAP.hdf5"))
 
     # Compare to current results
     # Gaps are quite large. This might be explained by the fact that there is no
     # adaptation of a given Gaussian in torch3 when the corresponding responsibilities
     # are below the responsibilities threshold
-    np.testing.assert_allclose(gmm.means, meansMAP_ref, rtol=2e-1)
-    np.testing.assert_allclose(gmm.variances, variancesMAP_ref, rtol=1e-4)
-    np.testing.assert_allclose(gmm.weights, weightsMAP_ref, rtol=1e-4)
+    np.testing.assert_allclose(gmm.means, meansMAP_ref, atol=2e-1)
+    np.testing.assert_allclose(gmm.variances, variancesMAP_ref, atol=1e-4)
+    np.testing.assert_allclose(gmm.weights, weightsMAP_ref, atol=1e-4)
 
 
 def test_gmm_test():
+    """ Tests a GMMMachine by computing scores against a model and comparing to a reference
+    """
 
-    # Tests a GMMMachine by computing scores against a model and compare to
-    # an old reference
-
-    ar = bob.io.base.load(datafile("dataforMAP.hdf5", __name__, path="../data/"))
+    ar = load_array(resource_filename("bob.learn.em", "data/dataforMAP.hdf5"))
 
     # Initialize GMMMachine
     n_gaussians = 5
     gmm = GMMMachine(n_gaussians)
-    gmm.means = bob.io.base.load(datafile("meansAfterML.hdf5", __name__, path="../data/"))
-    gmm.variances = bob.io.base.load(datafile("variancesAfterML.hdf5", __name__, path="../data/"))
-    gmm.weights = bob.io.base.load(datafile("weightsAfterML.hdf5", __name__, path="../data/"))
+    gmm.means = load_array(resource_filename("bob.learn.em", "data/meansAfterML.hdf5"))
+    gmm.variances = load_array(resource_filename("bob.learn.em", "data/variancesAfterML.hdf5"))
+    gmm.weights = load_array(resource_filename("bob.learn.em", "data/weightsAfterML.hdf5"))
 
     threshold = 0.001
     gmm.variance_thresholds = threshold
-- 
GitLab