def save(self, path_file):
        """ Save the model paremeters of the model (.params) and Compress 
            them into a zip file
        """

        # Ensuring the file has the proper name
        folder_name = os.path.dirname(path_file) + '/'
        file_name = os.path.basename(path_file)

        # Checking if the folder is accessible
        if not os.access(folder_name, os.W_OK):
            error_msg = '{} is not an accessible directory.'.format(folder_name)
            raise OSError(error_msg)

        # Delete the CPP object before saving
        del self.model
        
        # Saving the model
        super(NonParametricModel, self).save(path_file)

        # Re-introduce the C++ object
        if 'smooth' in self.name.lower() :
            self.model = _KernelModel(self.bandwidth, self.kernel_type)
        else:
            self.model = _KaplanMeierModel()
        self.load_properties()
    def __init__(self):
        # Initializing the C++ object
        self.model = _KaplanMeierModel()

        # Saving the attributes
        self.__repr__()
        self.not_implemented_error = "{} does not have this method."\
            .format(self.name)
    def load(self, path_file):
        """ Load the model paremeters from a zip file into a C++ external
            model 
        """        

        # Loading the model
        super(NonParametricModel, self).load(path_file)

        # Re-introduce the C++ object
        if 'smooth' in self.name.lower() :
            self.model = _KernelModel(self.bandwidth, self.kernel_type)
        else:
            self.model = _KaplanMeierModel()
        self.load_properties()