"""
simple code to evaluate a recommender, you need a sparse matrix of shape (10k,2,2kk)
"""

from utils.datareader import Datareader
from utils.evaluator import Evaluator
import utils.post_processing as post
import scipy.sparse as sps

filename = "file.npz"
output_name = "matrix_factorization"

if __name__ == '__main__':

    dr = Datareader(mode="offline", only_load=True)
    ev = Evaluator(dr)
    pids = dr.get_test_playlists().transpose()[0]
    algorithm_eurm_full = sps.load_npz(filename)
    algorithm_eurm_small = algorithm_eurm_full[pids]

    ev.evaluate(post.eurm_to_recommendation_list(algorithm_eurm_small),
                name=output_name,
                verbose=True,
                show_plot=True,
                save=True)
        import warnings
        warnings.warn(
            'This function still use the old version of the remove seed, it should be replaced soon by the one in post_processing class'
        )

        self.urm = sps.csr_matrix(self.urm[self.pid])
        tmp = self.urm.tocoo()
        row = tmp.row
        col = tmp.col
        min = self.eurm.tocoo().min()
        self.eurm = sps.lil_matrix(self.eurm)
        self.eurm[row, col] = -1
        self.eurm = sps.csr_matrix(self.eurm)

        return self.eurm


if __name__ == '__main__':
    from utils.datareader import Datareader
    dr = Datareader(verbose=False, mode="offline", only_load="False")

    rec = Top_pop()
    rec.fit(dr.get_urm(), dr.get_test_playlists().transpose()[0])
    eurm = rec.compute_rating().tocsr()
    sps.save_npz("top_pop online.npz", eurm.tocsr())
    exit()
    import utils.evaluator as ev
    from utils.post_processing import eurm_to_recommendation_list
    eva = ev.Evaluator(dr)

    eva.evaluate(eurm_to_recommendation_list(eurm), "cacca TOPTOP")