From 3b437bac092b07b77a84d75f4d709be28d2ca850 Mon Sep 17 00:00:00 2001
From: Tiago Freitas Pereira <tiagofrepereira@gmail.com>
Date: Tue, 24 Mar 2020 19:11:43 +0100
Subject: [PATCH] Handling another pickle business

---
 bob/bio/base/config/examples/pca_mobio-male.py |  6 +++---
 bob/bio/base/mixins/legacy.py                  | 18 ++++++++++++++++--
 bob/bio/base/mixins/linearize.py               |  5 +----
 3 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/bob/bio/base/config/examples/pca_mobio-male.py b/bob/bio/base/config/examples/pca_mobio-male.py
index 4d3e71a8..1998b7ff 100644
--- a/bob/bio/base/config/examples/pca_mobio-male.py
+++ b/bob/bio/base/config/examples/pca_mobio-male.py
@@ -9,8 +9,8 @@ from bob.bio.base.mixins.legacy import LegacyProcessorMixin, LegacyAlgorithmMixi
 from bob.bio.base.pipelines.vanilla_biometrics.legacy import LegacyBiometricAlgorithm
 
 import os
-base_dir = "/idiap/temp/tpereira/mobio/pca"
-#base_dir = "./example"
+#base_dir = "/idiap/temp/tpereira/mobio/pca"
+base_dir = "./example"
 
 
 original_directory=rc['bob.db.mobio.directory']
@@ -63,7 +63,7 @@ extractor = Pipeline(steps=[
                             ('1',CheckpointSampleLinearize(features_dir=os.path.join(base_dir,"extractor1"))), 
 	                        ('2',CheckpointSamplePCA(features_dir=os.path.join(base_dir,"extractor2"), model_path=os.path.join(base_dir,"pca.pkl")))
 	                       ])
-extractor = dask_it(extractor, npartitions=48)
+extractor = dask_it(extractor, npartitions=3)
 
 from bob.bio.base.pipelines.vanilla_biometrics.biometric_algorithm import Distance, BiometricAlgorithmCheckpointMixin
 
diff --git a/bob/bio/base/mixins/legacy.py b/bob/bio/base/mixins/legacy.py
index d572d161..3cf0d70f 100644
--- a/bob/bio/base/mixins/legacy.py
+++ b/bob/bio/base/mixins/legacy.py
@@ -97,6 +97,14 @@ class LegacyProcessorMixin(TransformerMixin):
             X = check_array(X, allow_nd=True)
             return [self.instance(x) for x in X]
 
+    def __setstate__(self):
+        # Handling unpicklable objects
+        self.instance = None
+
+    def __getstate__(self):
+        # Handling unpicklable objects
+        self.instance = None
+
 
 from bob.pipelines.mixins import CheckpointMixin, SampleMixin
 class LegacyAlgorithmMixin(CheckpointMixin, SampleMixin, BaseEstimator):
@@ -147,8 +155,6 @@ class LegacyAlgorithmMixin(CheckpointMixin, SampleMixin, BaseEstimator):
             # Organizing the date by class
             bob_X = scikit_to_bob_supervised(X, y)
             self.instance.train_projector(bob_X, self.projector_file)
-        else:
-            self.instance.train_projector(X, **fit_params)
 
         # Deleting the instance, so it's picklable
         self.instance = None
@@ -198,6 +204,14 @@ class LegacyAlgorithmMixin(CheckpointMixin, SampleMixin, BaseEstimator):
         else:
             raise ValueError("Type not allowed %s" % type(X[0]))
 
+    def __setstate__(self):
+        # Handling unpicklable objects
+        self.instance = None
+
+    def __getstate__(self):
+        # Handling unpicklable objects
+        self.instance = None
+
 
 def get_reader(reader, path):
     if is_picklable(reader):
diff --git a/bob/bio/base/mixins/linearize.py b/bob/bio/base/mixins/linearize.py
index 9d676a47..03d07956 100644
--- a/bob/bio/base/mixins/linearize.py
+++ b/bob/bio/base/mixins/linearize.py
@@ -5,7 +5,7 @@
 
 from bob.pipelines.mixins import CheckpointMixin, SampleMixin
 from sklearn.base import TransformerMixin
-from sklearn.utils.validation import check_array, check_is_fitted
+from sklearn.utils.validation import check_array
 import numpy
 
 
@@ -15,9 +15,6 @@ class Linearize(TransformerMixin):
     If a ``dtype`` is specified in the contructor, it is assured that the resulting
     """
 
-    def fit(self, X, y=None):
-        return self
-
     def transform(self, X):
 
         """__call__(data) -> data
-- 
GitLab