# Path: facerec_py/facerec/feature.py
# class AbstractFeature(object):
#     def compute(self, X, y):
#         raise NotImplementedError("Every AbstractFeature must implement the compute method.")
# 
#     def extract(self, X):
#         raise NotImplementedError("Every AbstractFeature must implement the extract method.")
# 
#     def save(self):
#         raise NotImplementedError("Not implemented yet (TODO).")
# 
#     def load(self):
#         raise NotImplementedError("Not implemented yet (TODO).")
# 
#     def __repr__(self):
#         return self.short_name()
# 
#     def short_name(self):
#         return self.__class__.__name__
# 
# Path: facerec_py/facerec/classifier.py
# class AbstractClassifier(object):
#     def compute(self, X, y):
#         raise NotImplementedError("Every AbstractClassifier must implement the compute method.")
# 
#     def predict(self, X):
#         raise NotImplementedError("Every AbstractClassifier must implement the predict method.")
# 
#     def update(self, X, y):
#         raise NotImplementedError("This Classifier is cannot be updated.")
# 
#     def binary_predict(self, q, lbl):
#         """
# 
#         :param q: feature
#         :param lbl: the specified class label
#         :return conf: confidence interval [0, 1]
#         :raise NotImplementedError:
#         """
#         raise NotImplementedError("The binary prediction is not implemented")


import copy
import collections
from facerec_py.facerec.feature import AbstractFeature
from facerec_py.facerec.classifier import AbstractClassifier



class AbstractPredictableModel(object):
    def compute(self, X, y):
        raise NotImplementedError("Every AbstractPredictableModel must implement the compute method.")

    def predict(self, X):
        raise NotImplementedError("Every AbstractPredictableModel must implement the predict method.")

    def __repr__(self):
        return self.__class__.__name__


class PredictableModel(AbstractPredictableModel):
    def __init__(self, feature, classifier):
        super(PredictableModel, self).__init__()

# Path: facerec_py/facerec/feature.py
# class AbstractFeature(object):
#     def compute(self, X, y):
#         raise NotImplementedError("Every AbstractFeature must implement the compute method.")
# 
#     def extract(self, X):
#         raise NotImplementedError("Every AbstractFeature must implement the extract method.")
# 
#     def save(self):
#         raise NotImplementedError("Not implemented yet (TODO).")
# 
#     def load(self):
#         raise NotImplementedError("Not implemented yet (TODO).")
# 
#     def __repr__(self):
#         return self.short_name()
# 
#     def short_name(self):
#         return self.__class__.__name__
# 
# Path: facerec_py/facerec/classifier.py
# class AbstractClassifier(object):
#     def compute(self, X, y):
#         raise NotImplementedError("Every AbstractClassifier must implement the compute method.")
# 
#     def predict(self, X):
#         raise NotImplementedError("Every AbstractClassifier must implement the predict method.")
# 
#     def update(self, X, y):
#         raise NotImplementedError("This Classifier is cannot be updated.")
# 
#     def binary_predict(self, q, lbl):
#         """
# 
#         :param q: feature
#         :param lbl: the specified class label
#         :return conf: confidence interval [0, 1]
#         :raise NotImplementedError:
#         """
#         raise NotImplementedError("The binary prediction is not implemented")


# Path: facerec_py/facerec/model.py
import copy
import collections
from facerec_py.facerec.feature import AbstractFeature
from facerec_py.facerec.classifier import AbstractClassifier




class AbstractPredictableModel(object):
    def compute(self, X, y):
        raise NotImplementedError("Every AbstractPredictableModel must implement the compute method.")

    def predict(self, X):
        raise NotImplementedError("Every AbstractPredictableModel must implement the predict method.")

    def __repr__(self):
        return self.__class__.__name__


class PredictableModel(AbstractPredictableModel):
    def __init__(self, feature, classifier):
        super(PredictableModel, self).__init__()

        if not isinstance(feature, AbstractFeature):