From b1240a8e9cf3500fe74338394e12652ef306b258 Mon Sep 17 00:00:00 2001
From: bbauvin <baptiste.bauvin@centrale-marseille.fr>
Date: Mon, 23 Oct 2017 14:48:49 -0400
Subject: [PATCH] python3 usable

---
 Code/MonoMultiViewClassifiers/ExecClassif.py  |  6 +++---
 .../Metrics/__init__.py                       |  4 +++-
 .../Monoview/ExecClassifMonoView.py           |  6 +++---
 .../Monoview/MonoviewUtils.py                 |  2 +-
 .../Monoview/__init__.py                      |  2 +-
 .../MonoviewClassifiers/__init__.py           |  2 +-
 .../Multiview/Fusion/FusionModule.py          |  2 +-
 .../Methods/EarlyFusionPackage/__init__.py    |  2 +-
 .../LateFusionPackage/MajorityVoting.py       |  2 +-
 .../Methods/LateFusionPackage/__init__.py     |  2 +-
 .../Multiview/Fusion/analyzeResults.py        |  4 ++--
 .../Multiview/GetMultiviewDb.py               | 10 +++++-----
 .../Mumbo/Classifiers/DecisionTree.py         |  2 +-
 .../Multiview/Mumbo/Classifiers/__init__.py   |  2 +-
 .../Multiview/Mumbo/MumboModule.py            |  2 +-
 .../Multiview/Mumbo/analyzeResults.py         |  2 +-
 .../MonoMultiViewClassifiers/utils/Dataset.py |  4 ++--
 .../utils/Interpret.py                        |  4 ++--
 .../utils/__init__.py                         |  2 +-
 .../utils/execution.py                        |  6 +++---
 Code/Versions.py                              | 20 ++++++++++++-------
 21 files changed, 48 insertions(+), 40 deletions(-)

diff --git a/Code/MonoMultiViewClassifiers/ExecClassif.py b/Code/MonoMultiViewClassifiers/ExecClassif.py
index 4dd5ee27..d1be6b7a 100644
--- a/Code/MonoMultiViewClassifiers/ExecClassif.py
+++ b/Code/MonoMultiViewClassifiers/ExecClassif.py
@@ -22,7 +22,7 @@ from . import MonoviewClassifiers
 from .Multiview.ExecMultiview import ExecMultiview, ExecMultiview_multicore
 from .Monoview.ExecClassifMonoView import ExecMonoview, ExecMonoview_multicore
 from .Multiview import GetMultiviewDb as DB
-from ResultAnalysis import resultAnalysis, analyzeLabels, analyzeIterResults, analyzeIterLabels, genNamesFromRes
+from .ResultAnalysis import resultAnalysis, analyzeLabels, analyzeIterResults, analyzeIterLabels, genNamesFromRes
 from .utils import execution, Dataset
 
 # Author-Info
@@ -87,7 +87,7 @@ def initMonoviewKWARGS(args, classifiersNames):
     for classifiersName in classifiersNames:
         classifierModule = getattr(MonoviewClassifiers, classifiersName)
         monoviewKWARGS[classifiersName + "KWARGSInit"] = classifierModule.getKWARGS(
-            [(key, value) for key, value in vars(args).iteritems() if key.startswith("CL_" + classifiersName)])
+            [(key, value) for key, value in vars(args).items() if key.startswith("CL_" + classifiersName)])
     return monoviewKWARGS
 
 
@@ -295,7 +295,7 @@ def execClassif(arguments):
 
     views, viewsIndices, allViews = execution.initViews(DATASET, args)
     if not views:
-        raise ValueError, "Empty views list, modify selected views to match dataset " + args.views
+        raise ValueError("Empty views list, modify selected views to match dataset " + args.views)
 
     NB_VIEW = len(views)
     NB_CLASS = DATASET.get("Metadata").attrs["nbClass"]
diff --git a/Code/MonoMultiViewClassifiers/Metrics/__init__.py b/Code/MonoMultiViewClassifiers/Metrics/__init__.py
index 2e9bab08..c5f17c0f 100644
--- a/Code/MonoMultiViewClassifiers/Metrics/__init__.py
+++ b/Code/MonoMultiViewClassifiers/Metrics/__init__.py
@@ -1,8 +1,10 @@
 import os
+modules = []
 for module in os.listdir(os.path.dirname(os.path.realpath(__file__))):
     if module == '__init__.py' or module[-3:] != '.py':
         continue
-    __import__(module[:-3], locals(), globals())
+    __import__(module[:-3], locals(), globals(), [], 1)
+    pass
 del module
 del os
 
diff --git a/Code/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py b/Code/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py
index e8d0b308..661b44cd 100644
--- a/Code/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py
+++ b/Code/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py
@@ -16,13 +16,13 @@ import h5py
 
 # Import own modules
 from .. import MonoviewClassifiers
-from analyzeResult import execute
+from .analyzeResult import execute
 from ..utils.Dataset import getValue, extractSubset
 
 # Author-Info
 __author__ = "Nikolas Huelsmann, Baptiste BAUVIN"
 __status__ = "Prototype"  # Production, Development, Prototype
-__date__ = 2016 - 03 - 25
+# __date__ = 2016 - 03 - 25
 
 
 def ExecMonoview_multicore(directory, name, labelsNames, classificationIndices, KFolds, datasetFileIndex, databaseType,
@@ -114,7 +114,7 @@ def ExecMonoview(directory, X, Y, name, labelsNames, classificationIndices, KFol
                                                             clKWARGS, labelsNames, X.shape,
                                                             y_train, y_train_pred, y_test, y_test_pred, t_end,
                                                             randomState, cl_res, outputFileName)
-    cl_desc = [value for key, value in sorted(clKWARGS.iteritems())]
+    cl_desc = [value for key, value in sorted(clKWARGS.items())]
     logging.debug("Done:\t Getting Results")
     logging.info(stringAnalysis)
     # labelsString = "-".join(labelsNames)
diff --git a/Code/MonoMultiViewClassifiers/Monoview/MonoviewUtils.py b/Code/MonoMultiViewClassifiers/Monoview/MonoviewUtils.py
index 7eed810f..53e33323 100644
--- a/Code/MonoMultiViewClassifiers/Monoview/MonoviewUtils.py
+++ b/Code/MonoMultiViewClassifiers/Monoview/MonoviewUtils.py
@@ -17,7 +17,7 @@ import numpy as np
 # Author-Info
 __author__ = "Nikolas Huelsmann, Baptiste Bauvin"
 __status__ = "Prototype"  # Production, Development, Prototype
-__date__ = 2016 - 03 - 25
+# __date__ = 2016 - 03 - 25
 
 
 def isUseful(labelSupports, index, CLASS_LABELS, labelDict):
diff --git a/Code/MonoMultiViewClassifiers/Monoview/__init__.py b/Code/MonoMultiViewClassifiers/Monoview/__init__.py
index f0fc97ad..8bbd0830 100644
--- a/Code/MonoMultiViewClassifiers/Monoview/__init__.py
+++ b/Code/MonoMultiViewClassifiers/Monoview/__init__.py
@@ -1 +1 @@
-from . import ExecClassifMonoView, MonoviewUtils
+from . import ExecClassifMonoView, MonoviewUtils, analyzeResult
diff --git a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/__init__.py b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/__init__.py
index bc6cdc28..03d92693 100644
--- a/Code/MonoMultiViewClassifiers/MonoviewClassifiers/__init__.py
+++ b/Code/MonoMultiViewClassifiers/MonoviewClassifiers/__init__.py
@@ -2,7 +2,7 @@ import os
 for module in os.listdir(os.path.dirname(os.path.realpath(__file__))):
     if module == '__init__.py' or module[-3:] != '.py':
         continue
-    __import__(module[:-3], locals(), globals())
+    __import__(module[:-3], locals(), globals(), [],1)
 del module
 del os
 
diff --git a/Code/MonoMultiViewClassifiers/Multiview/Fusion/FusionModule.py b/Code/MonoMultiViewClassifiers/Multiview/Fusion/FusionModule.py
index 30da0f52..f6445eac 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/Fusion/FusionModule.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/Fusion/FusionModule.py
@@ -158,7 +158,7 @@ class FusionClass:
         fusionMethodClass = getattr(fusionMethodModule, fusionMethod)
         nbCores = NB_CORES
         classifierKWARGS = dict(
-            (key, value) for key, value in kwargs.iteritems() if key not in ['fusionType', 'fusionMethod'])
+            (key, value) for key, value in kwargs.items() if key not in ['fusionType', 'fusionMethod'])
         self.classifier = fusionMethodClass(randomState, NB_CORES=nbCores, **classifierKWARGS)
 
     def setParams(self, paramsSet):
diff --git a/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/EarlyFusionPackage/__init__.py b/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/EarlyFusionPackage/__init__.py
index 406f941a..3636ca90 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/EarlyFusionPackage/__init__.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/EarlyFusionPackage/__init__.py
@@ -3,6 +3,6 @@ import os
 for module in os.listdir(os.path.dirname(os.path.realpath(__file__))):
     if module == '__init__.py' or module[-3:] != '.py':
         continue
-    __import__(module[:-3], locals(), globals())
+    __import__(module[:-3], locals(), globals(), [], 1)
 del module
 del os
diff --git a/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/LateFusionPackage/MajorityVoting.py b/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/LateFusionPackage/MajorityVoting.py
index 966b0ca3..6b0b0692 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/LateFusionPackage/MajorityVoting.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/LateFusionPackage/MajorityVoting.py
@@ -86,7 +86,7 @@ class MajorityVoting(LateFusionClassifier):
             try:
                 assert nbMaximum != nbView
             except:
-                print "Majority voting can't decide, each classifier has voted for a different class"
+                print("Majority voting can't decide, each classifier has voted for a different class")
                 raise
         predictedLabels = np.argmax(votes, axis=1)
         # Can be upgraded by restarting a new classification process if
diff --git a/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/LateFusionPackage/__init__.py b/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/LateFusionPackage/__init__.py
index 406f941a..3636ca90 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/LateFusionPackage/__init__.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/Fusion/Methods/LateFusionPackage/__init__.py
@@ -3,6 +3,6 @@ import os
 for module in os.listdir(os.path.dirname(os.path.realpath(__file__))):
     if module == '__init__.py' or module[-3:] != '.py':
         continue
-    __import__(module[:-3], locals(), globals())
+    __import__(module[:-3], locals(), globals(), [], 1)
 del module
 del os
diff --git a/Code/MonoMultiViewClassifiers/Multiview/Fusion/analyzeResults.py b/Code/MonoMultiViewClassifiers/Multiview/Fusion/analyzeResults.py
index 05526fdb..87d7d3a0 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/Fusion/analyzeResults.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/Fusion/analyzeResults.py
@@ -4,7 +4,7 @@ import matplotlib
 
 # matplotlib.use('Agg')
 import operator
-import Methods.LateFusion
+from .Methods import LateFusion
 from ... import Metrics
 
 # Author-Info
@@ -88,7 +88,7 @@ def execute(classifier, trainLabels,
                      " folds\n\nClassification configuration : \n\t-Algorithm used : " + fusionType + " " + fusionConfiguration
 
     if fusionType == "LateFusion":
-        stringAnalysis += Methods.LateFusion.getScores(classifier)
+        stringAnalysis += LateFusion.getScores(classifier)
     metricsScores = getMetricsScores(metrics, trainLabels, testLabels,
                                      DATASET, validationIndices, learningIndices)
     stringAnalysis += printMetricScore(metricsScores, metrics)
diff --git a/Code/MonoMultiViewClassifiers/Multiview/GetMultiviewDb.py b/Code/MonoMultiViewClassifiers/Multiview/GetMultiviewDb.py
index 18fa2efd..28139df7 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/GetMultiviewDb.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/GetMultiviewDb.py
@@ -36,13 +36,13 @@ def getPlausibleDBhdf5(features, pathF, name, NB_CLASS, LABELS_NAME, nbView=3,
             if exc.errno != errno.EEXIST:
                 raise
     datasetFile = h5py.File(pathF + "/Plausible.hdf5", "w")
-    CLASS_LABELS = np.array([0 for i in range(datasetLength / 2)] + [1 for i in range(datasetLength / 2)])
+    CLASS_LABELS = np.array([0 for i in range(int(datasetLength / 2))] + [1 for i in range(int(datasetLength / 2))])
     for viewIndex in range(nbView):
-        viewData = np.array([np.zeros(nbFeatures) for i in range(datasetLength / 2)] + [np.ones(nbFeatures)
+        viewData = np.array([np.zeros(nbFeatures) for i in range(int(datasetLength / 2))] + [np.ones(nbFeatures)
                                                                                         for i in
-                                                                                        range(datasetLength / 2)])
-        fakeTrueIndices = randomState.randint(0, datasetLength / 2 - 1, datasetLength / 5)
-        fakeFalseIndices = randomState.randint(datasetLength / 2, datasetLength - 1, datasetLength / 5)
+                                                                                        range(int(datasetLength / 2))])
+        fakeTrueIndices = randomState.randint(0, int(datasetLength / 2) - 1, int(datasetLength / 5))
+        fakeFalseIndices = randomState.randint(int(datasetLength / 2), datasetLength - 1, int(datasetLength / 5))
 
         viewData[fakeTrueIndices] = np.ones((len(fakeTrueIndices), nbFeatures))
         viewData[fakeFalseIndices] = np.zeros((len(fakeFalseIndices), nbFeatures))
diff --git a/Code/MonoMultiViewClassifiers/Multiview/Mumbo/Classifiers/DecisionTree.py b/Code/MonoMultiViewClassifiers/Multiview/Mumbo/Classifiers/DecisionTree.py
index 13f8ef38..874f3ce5 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/Mumbo/Classifiers/DecisionTree.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/Mumbo/Classifiers/DecisionTree.py
@@ -2,7 +2,7 @@ import sklearn
 from sklearn.base import BaseEstimator, ClassifierMixin
 import numpy as np
 # from ModifiedMulticlass import OneVsRestClassifier
-from SubSampling import subSample
+from .SubSampling import subSample
 import logging
 
 # Add weights
diff --git a/Code/MonoMultiViewClassifiers/Multiview/Mumbo/Classifiers/__init__.py b/Code/MonoMultiViewClassifiers/Multiview/Mumbo/Classifiers/__init__.py
index 67fe9de3..8db5fdba 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/Mumbo/Classifiers/__init__.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/Mumbo/Classifiers/__init__.py
@@ -8,6 +8,6 @@ import os
 for module in os.listdir(os.path.dirname(os.path.realpath(__file__))):
     if module == '__init__.py' or module[-3:] != '.py':
         continue
-    __import__(module[:-3], locals(), globals())
+    __import__(module[:-3], locals(), globals(), [], 1)
 del module
 del os
diff --git a/Code/MonoMultiViewClassifiers/Multiview/Mumbo/MumboModule.py b/Code/MonoMultiViewClassifiers/Multiview/Mumbo/MumboModule.py
index 35836ea8..d4cf238d 100644
--- a/Code/MonoMultiViewClassifiers/Multiview/Mumbo/MumboModule.py
+++ b/Code/MonoMultiViewClassifiers/Multiview/Mumbo/MumboModule.py
@@ -7,7 +7,7 @@ import pkgutil
 import logging
 from sklearn.metrics import accuracy_score
 
-import Classifiers
+from . import Classifiers
 from ...utils.Dataset import getV
 
 # Author-Info
diff --git a/Code/MonoMultiViewClassifiers/Multiview/Mumbo/analyzeResults.py b/Code/MonoMultiViewClassifiers/Multiview/Mumbo/analyzeResults.py
index dc5c7016..b38eead5 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
-import Classifiers
+from . import Classifiers
 from ... import Metrics
 from ...utils.Dataset import getV, getShape
 
diff --git a/Code/MonoMultiViewClassifiers/utils/Dataset.py b/Code/MonoMultiViewClassifiers/utils/Dataset.py
index 1ce96122..a2a1bd16 100644
--- a/Code/MonoMultiViewClassifiers/utils/Dataset.py
+++ b/Code/MonoMultiViewClassifiers/utils/Dataset.py
@@ -92,7 +92,7 @@ def confirm(resp=True, timeout=15):
     if not ans:
         return resp
     if ans not in ['y', 'Y', 'n', 'N']:
-        print 'please enter y or n.'
+        print('please enter y or n.')
     if ans == 'y' or ans == 'Y':
         return True
     if ans == 'n' or ans == 'N':
@@ -100,7 +100,7 @@ def confirm(resp=True, timeout=15):
 
 
 def input_(timeout=15):
-    print "You have " + str(timeout) + " seconds to stop the script by typing n"
+    print("You have " + str(timeout) + " seconds to stop the script by typing n")
     i, o, e = select.select([sys.stdin], [], [], timeout)
     if i:
         return sys.stdin.readline().strip()
diff --git a/Code/MonoMultiViewClassifiers/utils/Interpret.py b/Code/MonoMultiViewClassifiers/utils/Interpret.py
index 6f1882a5..00562135 100644
--- a/Code/MonoMultiViewClassifiers/utils/Interpret.py
+++ b/Code/MonoMultiViewClassifiers/utils/Interpret.py
@@ -1,7 +1,7 @@
 import numpy as np
 import matplotlib.pyplot as plt
 from matplotlib.ticker import FuncFormatter
-import cPickle
+import pickle
 
 
 def percent(x, pos):
@@ -26,7 +26,7 @@ def getFeatureImportance(classifier, directory, interpretString=""):
                                    for featureIndex, featureImportance in enumerate(featureImportances)
                                    if featureImportance != 0)
     with open(directory+'-feature_importances.pickle', 'wb') as handle:
-        cPickle.dump(featuresImportancesDict, handle)
+        pickle.dump(featuresImportancesDict, handle)
     interpretString += "Feature importances : \n"
     for featureIndex, featureImportance in zip(featureIndicesSorted, featureImportancesSorted):
         if featureImportance>0:
diff --git a/Code/MonoMultiViewClassifiers/utils/__init__.py b/Code/MonoMultiViewClassifiers/utils/__init__.py
index 842d824c..5baa4d9c 100644
--- a/Code/MonoMultiViewClassifiers/utils/__init__.py
+++ b/Code/MonoMultiViewClassifiers/utils/__init__.py
@@ -1 +1 @@
-from . import Dataset, execution, HyperParameterSearch, Transformations
+from . import Dataset, execution, HyperParameterSearch, Transformations, Interpret
diff --git a/Code/MonoMultiViewClassifiers/utils/execution.py b/Code/MonoMultiViewClassifiers/utils/execution.py
index d4ebb75d..7552f068 100644
--- a/Code/MonoMultiViewClassifiers/utils/execution.py
+++ b/Code/MonoMultiViewClassifiers/utils/execution.py
@@ -1,6 +1,6 @@
 import argparse
 import numpy as np
-import cPickle
+import pickle
 import time
 import os
 import errno
@@ -192,9 +192,9 @@ def initRandomState(randomStateArg, directory):
         except ValueError:
             fileName = randomStateArg
             with open(fileName, 'rb') as handle:
-                randomState = cPickle.load(handle)
+                randomState = pickle.load(handle)
     with open(directory + "randomState.pickle", "wb") as handle:
-        cPickle.dump(randomState, handle)
+        pickle.dump(randomState, handle)
     return randomState
 
 
diff --git a/Code/Versions.py b/Code/Versions.py
index bd0becc0..0da83a60 100644
--- a/Code/Versions.py
+++ b/Code/Versions.py
@@ -12,7 +12,7 @@
 # Author-Info
 __author__ = "Baptiste Bauvin"
 __status__ = "Prototype"  # Production, Development, Prototype
-__date__ = 2016 - 03 - 25
+# __date__ = 2016 - 03 - 25
 
 
 def testVersions():
@@ -96,14 +96,20 @@ def testVersions():
         isUpToDate = False
         toInstall.append("h5py")
 
-    # try:
-    #     import graphviz  #
-    # except:
-    #     isUpToDate = False
-    #     toInstall.append("graphviz")
+    try:
+        import graphviz  #
+    except:
+        isUpToDate = False
+        toInstall.append("graphviz")
+
+    try:
+        import pickle  #
+    except:
+        isUpToDate = False
+        toInstall.append("pickle")
 
     if not isUpToDate:
-        print "You can't run at the moment, please install the following modules : \n"+ "\n".join(toInstall)
+        print("You can't run at the moment, please install the following modules : \n"+ "\n".join(toInstall))
         quit()
 
 if __name__== "__main__":
-- 
GitLab