From 2138c1db0a7091d180d7ceb587feeadb8fb9e8c6 Mon Sep 17 00:00:00 2001
From: bbauvin <baptiste.bauvin@centrale-marseille.fr>
Date: Wed, 18 Oct 2017 12:10:38 -0400
Subject: [PATCH] Tests are working

---
 Code/MonoMultiViewClassifiers/ExecClassif.py  |  5 ++--
 .../Multiview/ExecMultiview.py                | 26 +++++++++----------
 .../Fusion/{Fusion.py => FusionModule.py}     |  9 ++++---
 .../Multiview/Fusion/Methods/__init__.py      |  6 ++++-
 .../Multiview/Fusion/__init__.py              |  4 +--
 .../Mumbo/{Mumbo.py => MumboModule.py}        |  4 +--
 .../Multiview/Mumbo/__init__.py               |  4 +--
 .../Multiview/Mumbo/analyzeResults.py         |  4 +--
 .../Multiview/__init__.py                     |  4 +--
 .../utils/HyperParameterSearch.py             |  8 +++---
 Code/Tests/poulet.py                          |  1 -
 Code/Tests/test_poulet.py                     |  7 +++++
 12 files changed, 46 insertions(+), 36 deletions(-)
 rename Code/MonoMultiViewClassifiers/Multiview/Fusion/{Fusion.py => FusionModule.py} (99%)
 rename Code/MonoMultiViewClassifiers/Multiview/Mumbo/{Mumbo.py => MumboModule.py} (99%)
 delete mode 100644 Code/Tests/poulet.py
 create mode 100644 Code/Tests/test_poulet.py

diff --git a/Code/MonoMultiViewClassifiers/ExecClassif.py b/Code/MonoMultiViewClassifiers/ExecClassif.py
index 9e172a8c..af290957 100644
--- a/Code/MonoMultiViewClassifiers/ExecClassif.py
+++ b/Code/MonoMultiViewClassifiers/ExecClassif.py
@@ -30,7 +30,6 @@ __author__ = "Baptiste Bauvin"
 __status__ = "Prototype"  # Production, Development, Prototype
 
 
-
 def initBenchmark(args):
     """Used to create a list of all the algorithm packages names used for the benchmark
     Needs args.CL_type, args.CL_algos_multiview, args.MU_types, args.FU_types, args.FU_late_methods,
@@ -47,7 +46,7 @@ def initBenchmark(args):
         benchmark["Multiview"] = dict((multiviewPackageName, "_") for multiviewPackageName in allMultiviewPackages)
         for multiviewPackageName in allMultiviewPackages:
             multiviewPackage = getattr(Multiview, multiviewPackageName)
-            multiviewModule = getattr(multiviewPackage, multiviewPackageName)
+            multiviewModule = getattr(multiviewPackage, multiviewPackageName+"Module")
             benchmark = multiviewModule.getBenchmark(benchmark, args=args)
 
     if "Multiview" in args.CL_type:
@@ -131,7 +130,7 @@ def initMultiviewArguments(args, benchmark, views, viewsIndices, argumentDiction
     if "Multiview" in benchmark:
         for multiviewAlgoName in benchmark["Multiview"]:
             multiviewPackage = getattr(Multiview, multiviewAlgoName)
-            mutliviewModule = getattr(multiviewPackage, multiviewAlgoName)
+            mutliviewModule = getattr(multiviewPackage, multiviewAlgoName+"Module")
             multiviewArguments += mutliviewModule.getArgs(args, benchmark, views, viewsIndices, randomState, directory,
                                                           resultsMonoview, classificationIndices)
     argumentDictionaries["Multiview"] = multiviewArguments
diff --git a/Code/MonoMultiViewClassifiers/Multiview/ExecMultiview.py b/Code/MonoMultiViewClassifiers/Multiview/ExecMultiview.py
index ef27e9f9..806b1474 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/ExecMultiview.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/ExecMultiview.py
@@ -1,8 +1,8 @@
 import sys
 import os.path
 import errno
-sys.path.append(
-    os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)))
+# sys.path.append(
+#     os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)))
 import os
 import logging
 import time
@@ -11,6 +11,7 @@ import imp
 
 from ..utils.Dataset import getShape
 from ..utils import HyperParameterSearch
+from . import Fusion, Mumbo
 # from . import *
 
 # Author-Info
@@ -51,19 +52,18 @@ def ExecMultiview(directory, DATASET, name, classificationIndices, KFolds, nbCor
 
     extractionTime = time.time() - t_start
     learningIndices, validationIndices = classificationIndices
-    packageDirectories = [entry for entry in os.listdir("MonoMultiViewClassifiers/Multiview/") if os.path.isdir("MonoMultiViewClassifiers/Multiview/"+entry)]
-    for packageDirectory in packageDirectories:
-        if packageDirectory == CL_type:
-            classifierModule = imp.load_source(CL_type, "MonoMultiViewClassifiers/Multiview/"+packageDirectory+"/"+CL_type+".py")
-            analysisModule = imp.load_source(CL_type, "MonoMultiViewClassifiers/Multiview/"+packageDirectory+"/analyzeResults.py")
-    import pdb; pdb.set_trace()
-    # classifierPackage = getattr(locals(), CL_type)  # Permet d'appeler un module avec une string
-    # classifierModule = getattr(classifierPackage, CL_type)
-    classifierClass = getattr(classifierModule, CL_type)
-    # analysisModule = getattr(classifierPackage, "analyzeResults")
+    # packageDirectories = [entry for entry in os.listdir("MonoMultiViewClassifiers/Multiview/") if os.path.isdir("MonoMultiViewClassifiers/Multiview/"+entry)]
+    # for packageDirectory in packageDirectories:
+    #     if packageDirectory == CL_type:
+    #         classifierModule = imp.find_module(CL_type, "MonoMultiViewClassifiers/Multiview/"+packageDirectory+"/"+CL_type+".py")
+    #         analysisModule = imp.load_source(CL_type, "MonoMultiViewClassifiers/Multiview/"+packageDirectory+"/analyzeResults.py")
+    classifierPackage = globals()[CL_type]  # Permet d'appeler un module avec une string
+    classifierModule = getattr(classifierPackage, CL_type+"Module")
+    classifierClass = getattr(classifierModule, CL_type+"Class")
+    analysisModule = getattr(classifierPackage, "analyzeResults")
 
     if hyperParamSearch != "None":
-        classifier = HyperParameterSearch.searchBestSettings(DATASET, classifierModule, CL_type, metrics, learningIndices, KFolds, randomState,
+        classifier = HyperParameterSearch.searchBestSettings(DATASET, classifierPackage, CL_type, metrics, learningIndices, KFolds, randomState,
                                         viewsIndices=viewsIndices, searchingTool=hyperParamSearch, nIter=nIter,
                                         **classificationKWARGS)
     else:
diff --git a/Code/MonoMultiViewClassifiers/Multiview/Fusion/Fusion.py b/Code/MonoMultiViewClassifiers/Multiview/Fusion/FusionModule.py
similarity index 99%
rename from Code/MonoMultiViewClassifiers/Multiview/Fusion/Fusion.py
rename to Code/MonoMultiViewClassifiers/Multiview/Fusion/FusionModule.py
index c6442c56..30da0f52 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/Fusion/Fusion.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/Fusion/FusionModule.py
@@ -3,8 +3,11 @@ import logging
 import pkgutil
 
 # from Methods import *
-import pdb;pdb.set_trace()
-import Methods
+
+try:
+    from . import Methods
+except ValueError:
+    import pdb;pdb.set_trace()
 
 from ... import MonoviewClassifiers
 from ...utils.Dataset import getV
@@ -146,7 +149,7 @@ def getCLString(classificationKWARGS):
                classificationKWARGS["classifiersNames"]
 
 
-class Fusion:
+class FusionClass:
     def __init__(self, randomState, NB_CORES=1, **kwargs):
         fusionType = kwargs['fusionType']
         fusionMethod = kwargs['fusionMethod']
diff --git a/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/__init__.py b/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/__init__.py
index c7ee5473..a09dbec1 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/__init__.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/__init__.py
@@ -1,3 +1,7 @@
-from . import EarlyFusion, LateFusion, LateFusionPackage, EarlyFusionPackage
+# import pdb;pdb.set_trace()
+from . import EarlyFusion
+from . import LateFusion
+from . import LateFusionPackage
+from . import EarlyFusionPackage
 
 __all__ = ["EarlyFusionPackage", "LateFusionPackage"]
diff --git a/Code/MonoMultiViewClassifiers/Multiview/Fusion/__init__.py b/Code/MonoMultiViewClassifiers/Multiview/Fusion/__init__.py
index dd2810a4..f1ba7157 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/Fusion/__init__.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/Fusion/__init__.py
@@ -1,3 +1,3 @@
-from . import Fusion, analyzeResults, Methods
+from . import FusionModule, analyzeResults, Methods
 
-__all__ = ["Fusion", "Methods"]
+__all__ = ["FusionModule.py", "Methods"]
diff --git a/Code/MonoMultiViewClassifiers/Multiview/Mumbo/Mumbo.py b/Code/MonoMultiViewClassifiers/Multiview/Mumbo/MumboModule.py
similarity index 99%
rename from Code/MonoMultiViewClassifiers/Multiview/Mumbo/Mumbo.py
rename to Code/MonoMultiViewClassifiers/Multiview/Mumbo/MumboModule.py
index b4cc4cb3..35836ea8 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/Mumbo/Mumbo.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/Mumbo/MumboModule.py
@@ -124,7 +124,7 @@ def gridSearch_hdf5(DATASET, viewIndices, classificationKWARGS, learningIndices,
     for classifierIndex, classifierName in enumerate(classifiersNames):
         logging.debug("\tStart:\t Random search for " + classifierName + " on " +
                       DATASET.get("View" + str(viewIndices[classifierIndex])).attrs["name"])
-        classifierModule = globals()[classifierName]  # Permet d'appeler une fonction avec une string
+        classifierModule = getattr(Classifiers, classifierName)  # Permet d'appeler une fonction avec une string
         classifierGridSearch = getattr(classifierModule, "hyperParamSearch")
         bestSettings.append(classifierGridSearch(getV(DATASET, viewIndices[classifierIndex], learningIndices),
                                                  DATASET.get("Labels").value[learningIndices], randomState,
@@ -140,7 +140,7 @@ def getCLString(classificationKWARGS):
     return "Mumbo-" + "-".join(classificationKWARGS["classifiersNames"])
 
 
-class Mumbo:
+class MumboClass:
     def __init__(self, randomState, NB_CORES=1, **kwargs):
         self.maxIter = kwargs["maxIter"]
         self.minIter = kwargs["minIter"]
diff --git a/Code/MonoMultiViewClassifiers/Multiview/Mumbo/__init__.py b/Code/MonoMultiViewClassifiers/Multiview/Mumbo/__init__.py
index 5f2e3464..059b8c71 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/Mumbo/__init__.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/Mumbo/__init__.py
@@ -1,3 +1,3 @@
-from . import Mumbo, analyzeResults
+from . import MumboModule, analyzeResults
 
-__all__ = ["Mumbo", "Classifiers"]
+__all__ = ["MumboModule.py", "Classifiers"]
diff --git a/Code/MonoMultiViewClassifiers/Multiview/Mumbo/analyzeResults.py b/Code/MonoMultiViewClassifiers/Multiview/Mumbo/analyzeResults.py
index d06276eb..dc5c7016 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/Mumbo/analyzeResults.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/Mumbo/analyzeResults.py
@@ -6,7 +6,7 @@ from datetime import timedelta as hms
 # import logging
 
 # import Mumbo
-# from Classifiers import *
+import Classifiers
 from ... import Metrics
 from ...utils.Dataset import getV, getShape
 
@@ -92,7 +92,7 @@ def getAlgoConfig(classifier, classificationKWARGS, nbCores, viewNames, hyperPar
     minIter = classificationKWARGS["minIter"]
     threshold = classificationKWARGS["threshold"]
     extractionTime, classificationTime = times
-    weakClassifierConfigs = [getattr(globals()[classifierName], 'getConfig')(classifiersConfig) for classifiersConfig,
+    weakClassifierConfigs = [getattr(getattr(Classifiers, classifierName), 'getConfig')(classifiersConfig) for classifiersConfig,
                                                                                                     classifierName
                              in zip(classifier.classifiersConfigs, classifier.classifiersNames)]
     classifierAnalysis = [classifierName + " " + weakClassifierConfig + "on " + feature for classifierName,
diff --git a/Code/MonoMultiViewClassifiers/Multiview/__init__.py b/Code/MonoMultiViewClassifiers/Multiview/__init__.py
index 55fdc627..47661078 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/__init__.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/__init__.py
@@ -1,6 +1,4 @@
-from . import GetMultiviewDb#, ExecMultiview, Mumbo, Fusion
-# import pdb;pdb.set_trace()
-
+from . import GetMultiviewDb
 from . import ExecMultiview
 from . import Mumbo
 from . import Fusion
diff --git a/Code/MonoMultiViewClassifiers/utils/HyperParameterSearch.py b/Code/MonoMultiViewClassifiers/utils/HyperParameterSearch.py
index ddb0b434..bdc430ad 100644
--- a/Code/MonoMultiViewClassifiers/utils/HyperParameterSearch.py
+++ b/Code/MonoMultiViewClassifiers/utils/HyperParameterSearch.py
@@ -6,13 +6,13 @@ import itertools
 from .. import Metrics
 
 
-def searchBestSettings(dataset, classifierName, metrics, iLearningIndices, iKFolds, randomState, viewsIndices=None,
+def searchBestSettings(dataset, classifierPackage, classifierName, metrics, iLearningIndices, iKFolds, randomState, viewsIndices=None,
                        searchingTool="hyperParamSearch", nIter=1, **kwargs):
     if viewsIndices is None:
         viewsIndices = range(dataset.get("Metadata").attrs["nbView"])
     thismodule = sys.modules[__name__]
     searchingToolMethod = getattr(thismodule, searchingTool)
-    bestSettings = searchingToolMethod(dataset, classifierName, metrics, iLearningIndices, iKFolds, randomState,
+    bestSettings = searchingToolMethod(dataset, classifierPackage, classifierName, metrics, iLearningIndices, iKFolds, randomState,
                                        viewsIndices=viewsIndices, nIter=nIter, **kwargs)
     return bestSettings  # or well set clasifier ?
 
@@ -32,8 +32,8 @@ def randomizedSearch(dataset, classifierPackage, classifierName, metrics, learni
         metricKWARGS = dict((index, metricConfig) for index, metricConfig in enumerate(metric[1]))
     else:
         metricKWARGS = {}
-    classifierModule = getattr(classifierPackage, classifierName)
-    classifierClass = getattr(classifierModule, classifierName)
+    classifierModule = getattr(classifierPackage, classifierName+"Module")
+    classifierClass = getattr(classifierModule, classifierName+"Class")
     if classifierName != "Mumbo":
         paramsSets = classifierModule.genParamsSets(classificationKWARGS, randomState, nIter=nIter)
         if metricModule.getConfig()[-14] == "h":
diff --git a/Code/Tests/poulet.py b/Code/Tests/poulet.py
deleted file mode 100644
index 0733701a..00000000
--- a/Code/Tests/poulet.py
+++ /dev/null
@@ -1 +0,0 @@
-print "essai2"
\ No newline at end of file
diff --git a/Code/Tests/test_poulet.py b/Code/Tests/test_poulet.py
new file mode 100644
index 00000000..31e6debf
--- /dev/null
+++ b/Code/Tests/test_poulet.py
@@ -0,0 +1,7 @@
+import unittest
+
+
+class TestFromage(unittest.TestCase):
+
+    def test_fromage(self):
+        self.assertEqual(1,1)
\ No newline at end of file
-- 
GitLab