From ad0622011b3795e4de676a205243bb4dea034bd0 Mon Sep 17 00:00:00 2001
From: Andre Mayoraz <andre.mayoraz@idiap.ch>
Date: Wed, 19 Oct 2022 16:59:17 +0200
Subject: [PATCH] Adaptation to new directory structure

---
 .gitignore            |   1 +
 doc/conf.py           |   2 -
 pyproject.toml        |   4 +-
 tests/test_gmm.py     | 106 ++++++++++++++++++------------------------
 tests/test_ivector.py |  27 +++++------
 5 files changed, 59 insertions(+), 81 deletions(-)

diff --git a/.gitignore b/.gitignore
index f9eef34..874a8f5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,3 +20,4 @@ build
 record.txt
 dask-worker-space
 .gitlab-ci-local*
+html/
diff --git a/doc/conf.py b/doc/conf.py
index 2999f19..f882779 100755
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -2,13 +2,11 @@
 # vim: set fileencoding=utf-8 :
 
 import os
-import sys
 
 import pkg_resources
 
 # -- General configuration -----------------------------------------------------
 # Adding the parent directory to the python path.
-sys.path.insert(0, os.path.abspath("../"))
 
 # If your documentation needs a minimal Sphinx version, state it here.
 needs_sphinx = "1.3"
diff --git a/pyproject.toml b/pyproject.toml
index 668bf60..8f556f8 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -48,6 +48,7 @@
         "sphinx-autodoc-typehints",
         "sphinxcontrib-programoutput",
         "matplotlib",
+        "furo",
         ]
     test = [
         "pytest",
@@ -57,8 +58,7 @@
 
 [tool.setuptools]
     zip-safe = false
-    include-package-data = true
-    packages = ["bob"]
+    package-dir = {"" = "src"}
 
 [tool.setuptools.dynamic]
     readme = {file = "README.rst"}
diff --git a/tests/test_gmm.py b/tests/test_gmm.py
index cb9ebc2..af77842 100644
--- a/tests/test_gmm.py
+++ b/tests/test_gmm.py
@@ -47,13 +47,13 @@ def loadGMM():
     gmm = GMMMachine(n_gaussians=2)
 
     gmm.weights = load_array(
-        resource_filename("bob.learn.em", "data/gmm.init_weights.hdf5")
+        resource_filename(__name__, "data/gmm.init_weights.hdf5")
     )
     gmm.means = load_array(
-        resource_filename("bob.learn.em", "data/gmm.init_means.hdf5")
+        resource_filename(__name__, "data/gmm.init_means.hdf5")
     )
     gmm.variances = load_array(
-        resource_filename("bob.learn.em", "data/gmm.init_variances.hdf5")
+        resource_filename(__name__, "data/gmm.init_variances.hdf5")
     )
 
     return gmm
@@ -296,10 +296,8 @@ def test_GMMMachine():
 
 def test_GMMMachine_legacy_loading():
     """Tests that old GMMMachine checkpoints are loaded correctly."""
-    reference_file = resource_filename("bob.learn.em", "data/gmm_ML.hdf5")
-    legacy_gmm_file = resource_filename(
-        "bob.learn.em", "data/gmm_ML_legacy.hdf5"
-    )
+    reference_file = resource_filename(__name__, "data/gmm_ML.hdf5")
+    legacy_gmm_file = resource_filename(__name__, "data/gmm_ML_legacy.hdf5")
     gmm = GMMMachine.from_hdf5(legacy_gmm_file)
     assert isinstance(gmm, GMMMachine)
     assert isinstance(gmm.n_gaussians, np.int64), type(gmm.n_gaussians)
@@ -312,7 +310,7 @@ def test_GMMMachine_legacy_loading():
 def test_GMMMachine_stats():
     """Tests a GMMMachine (statistics)"""
     arrayset = load_array(
-        resource_filename("bob.learn.em", "data/faithful.torch3_f64.hdf5")
+        resource_filename(__name__, "data/faithful.torch3_f64.hdf5")
     )
     gmm = GMMMachine(n_gaussians=2)
     gmm.weights = np.array([0.5, 0.5], "float64")
@@ -327,7 +325,7 @@ def test_GMMMachine_stats():
 
     stats_ref = GMMStats(n_gaussians=2, n_features=2)
     stats_ref.load(
-        HDF5File(resource_filename("bob.learn.em", "data/stats.hdf5"), "r")
+        HDF5File(resource_filename(__name__, "data/stats.hdf5"), "r")
     )
 
     np.testing.assert_equal(stats.t, stats_ref.t)
@@ -341,14 +339,12 @@ def test_GMMMachine_stats():
 def test_GMMMachine_ll_computation():
     """Test a GMMMachine (log-likelihood computation)"""
 
-    data = load_array(resource_filename("bob.learn.em", "data/data.hdf5"))
+    data = load_array(resource_filename(__name__, "data/data.hdf5"))
     gmm = GMMMachine(n_gaussians=2)
-    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.weights = load_array(resource_filename(__name__, "data/weights.hdf5"))
+    gmm.means = load_array(resource_filename(__name__, "data/means.hdf5"))
     gmm.variances = load_array(
-        resource_filename("bob.learn.em", "data/variances.hdf5")
+        resource_filename(__name__, "data/variances.hdf5")
     )
 
     # Compare the log-likelihood with the one obtained using Chris Matlab implementation
@@ -367,12 +363,10 @@ def test_GMMMachine_single_ll_vs_multiple():
     )  # 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 = load_array(
-        resource_filename("bob.learn.em", "data/weights.hdf5")
-    )
-    gmm.means = load_array(resource_filename("bob.learn.em", "data/means.hdf5"))
+    gmm.weights = load_array(resource_filename(__name__, "data/weights.hdf5"))
+    gmm.means = load_array(resource_filename(__name__, "data/means.hdf5"))
     gmm.variances = load_array(
-        resource_filename("bob.learn.em", "data/variances.hdf5")
+        resource_filename(__name__, "data/variances.hdf5")
     )
 
     ll = 0
@@ -813,12 +807,10 @@ def test_map_transformer():
 def test_gmm_ML_1():
     """Trains a GMMMachine with ML_GMMTrainer"""
     ar = load_array(
-        resource_filename("bob.learn.em", "data/faithful.torch3_f64.hdf5")
+        resource_filename(__name__, "data/faithful.torch3_f64.hdf5")
     )
     gmm_ref = GMMMachine.from_hdf5(
-        HDF5File(
-            resource_filename("bob.learn.em", "data/gmm_ML_fitted.hdf5"), "r"
-        )
+        HDF5File(resource_filename(__name__, "data/gmm_ML_fitted.hdf5"), "r")
     )
 
     for transform in (to_numpy, to_dask_array):
@@ -847,20 +839,18 @@ def test_gmm_ML_1():
 
 def test_gmm_ML_2():
     # Trains a GMMMachine with ML_GMMTrainer; compares to a reference
-    ar = load_array(
-        resource_filename("bob.learn.em", "data/dataNormalized.hdf5")
-    )
+    ar = load_array(resource_filename(__name__, "data/dataNormalized.hdf5"))
 
     # Test results
     # Load torch3vision reference
     meansML_ref = load_array(
-        resource_filename("bob.learn.em", "data/meansAfterML.hdf5")
+        resource_filename(__name__, "data/meansAfterML.hdf5")
     )
     variancesML_ref = load_array(
-        resource_filename("bob.learn.em", "data/variancesAfterML.hdf5")
+        resource_filename(__name__, "data/variancesAfterML.hdf5")
     )
     weightsML_ref = load_array(
-        resource_filename("bob.learn.em", "data/weightsAfterML.hdf5")
+        resource_filename(__name__, "data/weightsAfterML.hdf5")
     )
 
     for transform in (to_numpy, to_dask_array):
@@ -868,16 +858,14 @@ def test_gmm_ML_2():
         # Initialize GMMMachine
         gmm = GMMMachine(n_gaussians=5)
         gmm.means = load_array(
-            resource_filename("bob.learn.em", "data/meansAfterKMeans.hdf5")
+            resource_filename(__name__, "data/meansAfterKMeans.hdf5")
         ).astype("float64")
         gmm.variances = load_array(
-            resource_filename("bob.learn.em", "data/variancesAfterKMeans.hdf5")
+            resource_filename(__name__, "data/variancesAfterKMeans.hdf5")
         ).astype("float64")
         gmm.weights = np.exp(
             load_array(
-                resource_filename(
-                    "bob.learn.em", "data/weightsAfterKMeans.hdf5"
-                )
+                resource_filename(__name__, "data/weightsAfterKMeans.hdf5")
             ).astype("float64")
         )
 
@@ -904,15 +892,15 @@ def test_gmm_ML_2():
 def test_gmm_MAP_1():
     # Train a GMMMachine with MAP_GMMTrainer
     ar = load_array(
-        resource_filename("bob.learn.em", "data/faithful.torch3_f64.hdf5")
+        resource_filename(__name__, "data/faithful.torch3_f64.hdf5")
     )
 
     # test with rng
     gmmprior = GMMMachine.from_hdf5(
-        HDF5File(resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "r")
+        HDF5File(resource_filename(__name__, "data/gmm_ML.hdf5"), "r")
     )
     gmm = GMMMachine.from_hdf5(
-        HDF5File(resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "r"),
+        HDF5File(resource_filename(__name__, "data/gmm_ML.hdf5"), "r"),
         ubm=gmmprior,
     )
     gmm.update_means = True
@@ -923,19 +911,17 @@ def test_gmm_MAP_1():
     gmm = gmm.fit(ar)
 
     gmmprior = GMMMachine.from_hdf5(
-        HDF5File(resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "r")
+        HDF5File(resource_filename(__name__, "data/gmm_ML.hdf5"), "r")
     )
 
     gmm_ref = GMMMachine.from_hdf5(
-        HDF5File(resource_filename("bob.learn.em", "data/gmm_MAP.hdf5"), "r")
+        HDF5File(resource_filename(__name__, "data/gmm_MAP.hdf5"), "r")
     )
 
     for transform in (to_numpy, to_dask_array):
         ar = transform(ar)
         gmm = GMMMachine.from_hdf5(
-            HDF5File(
-                resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "r"
-            ),
+            HDF5File(resource_filename(__name__, "data/gmm_ML.hdf5"), "r"),
             ubm=gmmprior,
         )
         gmm.update_means = True
@@ -952,13 +938,11 @@ def test_gmm_MAP_1():
 def test_gmm_MAP_2():
     # Train a GMMMachine with MAP_GMMTrainer and compare with matlab reference
 
-    data = load_array(resource_filename("bob.learn.em", "data/data.hdf5"))
+    data = load_array(resource_filename(__name__, "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"))
+    means = load_array(resource_filename(__name__, "data/means.hdf5"))
+    variances = load_array(resource_filename(__name__, "data/variances.hdf5"))
+    weights = load_array(resource_filename(__name__, "data/weights.hdf5"))
 
     gmm = GMMMachine(n_gaussians=2)
     gmm.means = means
@@ -980,7 +964,7 @@ def test_gmm_MAP_2():
     gmm_adapted.weights = weights
 
     new_means = load_array(
-        resource_filename("bob.learn.em", "data/new_adapted_mean.hdf5")
+        resource_filename(__name__, "data/new_adapted_mean.hdf5")
     )
 
     for transform in (to_numpy, to_dask_array):
@@ -993,19 +977,19 @@ def test_gmm_MAP_2():
 
 def test_gmm_MAP_3():
     # Train a GMMMachine with MAP_GMMTrainer; compares to old reference
-    ar = load_array(resource_filename("bob.learn.em", "data/dataforMAP.hdf5"))
+    ar = load_array(resource_filename(__name__, "data/dataforMAP.hdf5"))
 
     # Initialize GMMMachine
     n_gaussians = 5
     prior_gmm = GMMMachine(n_gaussians)
     prior_gmm.means = load_array(
-        resource_filename("bob.learn.em", "data/meansAfterML.hdf5")
+        resource_filename(__name__, "data/meansAfterML.hdf5")
     )
     prior_gmm.variances = load_array(
-        resource_filename("bob.learn.em", "data/variancesAfterML.hdf5")
+        resource_filename(__name__, "data/variancesAfterML.hdf5")
     )
     prior_gmm.weights = load_array(
-        resource_filename("bob.learn.em", "data/weightsAfterML.hdf5")
+        resource_filename(__name__, "data/weightsAfterML.hdf5")
     )
 
     threshold = 0.001
@@ -1031,13 +1015,13 @@ def test_gmm_MAP_3():
     # Test results
     # Load torch3vision reference
     meansMAP_ref = load_array(
-        resource_filename("bob.learn.em", "data/meansAfterMAP.hdf5")
+        resource_filename(__name__, "data/meansAfterMAP.hdf5")
     )
     variancesMAP_ref = load_array(
-        resource_filename("bob.learn.em", "data/variancesAfterMAP.hdf5")
+        resource_filename(__name__, "data/variancesAfterMAP.hdf5")
     )
     weightsMAP_ref = load_array(
-        resource_filename("bob.learn.em", "data/weightsAfterMAP.hdf5")
+        resource_filename(__name__, "data/weightsAfterMAP.hdf5")
     )
 
     for transform in (to_numpy, to_dask_array):
@@ -1057,19 +1041,19 @@ def test_gmm_MAP_3():
 def test_gmm_test():
     # Tests a GMMMachine by computing scores against a model and comparing to a reference
 
-    ar = load_array(resource_filename("bob.learn.em", "data/dataforMAP.hdf5"))
+    ar = load_array(resource_filename(__name__, "data/dataforMAP.hdf5"))
 
     # Initialize GMMMachine
     n_gaussians = 5
     gmm = GMMMachine(n_gaussians)
     gmm.means = load_array(
-        resource_filename("bob.learn.em", "data/meansAfterML.hdf5")
+        resource_filename(__name__, "data/meansAfterML.hdf5")
     )
     gmm.variances = load_array(
-        resource_filename("bob.learn.em", "data/variancesAfterML.hdf5")
+        resource_filename(__name__, "data/variancesAfterML.hdf5")
     )
     gmm.weights = load_array(
-        resource_filename("bob.learn.em", "data/weightsAfterML.hdf5")
+        resource_filename(__name__, "data/weightsAfterML.hdf5")
     )
 
     threshold = 0.001
diff --git a/tests/test_ivector.py b/tests/test_ivector.py
index e1a30f7..8001db0 100644
--- a/tests/test_ivector.py
+++ b/tests/test_ivector.py
@@ -14,7 +14,8 @@ from pkg_resources import resource_filename
 
 from bob.learn.em import GMMMachine, GMMStats, IVectorMachine
 from bob.learn.em.ivector import e_step, m_step
-from bob.learn.em.test.test_kmeans import to_numpy
+
+from .test_kmeans import to_numpy
 
 
 @contextlib.contextmanager
@@ -105,10 +106,10 @@ def test_ivector_machine_transformer():
 
 def test_ivector_machine_training():
     gs1 = GMMStats.from_hdf5(
-        resource_filename("bob.learn.em", "data/ivector_gs1.hdf5")
+        resource_filename(__name__, "data/ivector_gs1.hdf5")
     )
     gs2 = GMMStats.from_hdf5(
-        resource_filename("bob.learn.em", "data/ivector_gs2.hdf5")
+        resource_filename(__name__, "data/ivector_gs2.hdf5")
     )
 
     data = [gs1, gs2]
@@ -160,7 +161,7 @@ def test_trainer_nosigma():
 
     data = [
         GMMStats.from_hdf5(
-            resource_filename("bob.learn.em", f"data/ivector_gs{i+1}.hdf5")
+            resource_filename(__name__, f"data/ivector_gs{i+1}.hdf5")
         )
         for i in range(2)
     ]
@@ -168,7 +169,7 @@ def test_trainer_nosigma():
     references = [
         _load_references_from_file(
             resource_filename(
-                "bob.learn.em", f"data/ivector_ref_nosigma_step{i+1}.hdf5"
+                __name__, f"data/ivector_ref_nosigma_step{i+1}.hdf5"
             )
         )
         for i in range(2)
@@ -217,16 +218,14 @@ def test_trainer_update_sigma():
 
     data = [
         GMMStats.from_hdf5(
-            resource_filename("bob.learn.em", f"data/ivector_gs{i+1}.hdf5")
+            resource_filename(__name__, f"data/ivector_gs{i+1}.hdf5")
         )
         for i in range(2)
     ]
 
     references = [
         _load_references_from_file(
-            resource_filename(
-                "bob.learn.em", f"data/ivector_ref_step{i+1}.hdf5"
-            )
+            resource_filename(__name__, f"data/ivector_ref_step{i+1}.hdf5")
         )
         for i in range(2)
     ]
@@ -273,20 +272,16 @@ def test_ivector_fit():
     ubm.means = np.array([[1.0, 7, 4], [4, 5, 3]])
     ubm.variances = np.array([[0.5, 1.0, 1.5], [1.0, 1.5, 2.0]])
 
-    fit_data_file = resource_filename(
-        "bob.learn.em", "data/ivector_fit_data.hdf5"
-    )
+    fit_data_file = resource_filename(__name__, "data/ivector_fit_data.hdf5")
     with HDF5File(fit_data_file, "r") as f:
         fit_data = f["array"][()]
 
-    test_data_file = resource_filename(
-        "bob.learn.em", "data/ivector_test_data.hdf5"
-    )
+    test_data_file = resource_filename(__name__, "data/ivector_test_data.hdf5")
     with HDF5File(test_data_file, "r") as f:
         test_data = f["array"][()]
 
     reference_result_file = resource_filename(
-        "bob.learn.em", "data/ivector_results.hdf5"
+        __name__, "data/ivector_results.hdf5"
     )
     with HDF5File(reference_result_file, "r") as f:
         reference_result = f["array"][()]
-- 
GitLab