def filter_liste(liste_reponses_api, distance_hamming=1):
    """
    Trie une liste de films à partir d'une liste de réponses.
    Cela permet de créer une API Stateless.
    On peut ainsi prédire les questions posées à partir de l'ordre des réponses données.
    :param distance_hamming:
    :param liste_reponses_api: liste d'entier correpondant aux répoonses données par l'utilisateur.
                Pour référence: 0 correspond à non
                                1 correspond à oui
                                2 correspond à je ne sais pas
                                3 correspond à probablement
                                4 correspond à probablement pas
    :return: tuple (liste_filtree, liste_questions_posees) correspondant à la liste
                des films restant et la liste des questions posees à partir de la liste des réponses
                données par l'utilisateur
    """
    liste_film = recuperer_oeuvres()
    liste_questions_repondues = list()
    liste_reponses_filtrante = list()
    liste_questions_posees = list()
    question = question_ideale(liste_film, liste_questions_posees)
    liste_filtre = liste_film
    for reponse in liste_reponses_api:
        liste_questions_repondues.append(question[0])
        if reponse == 0 or reponse == 1:  # 0 = non 1=oui 2=jsp 3=prb oui 4= prb pas si l'utilisateur ne sais pas on ne peut pas filtrer
            liste_reponses_filtrante.append(reponse)
            print(liste_filtre)
            liste_filtre = list(
                filter(lambda x: filter_carac(x, liste_questions_repondues, liste_reponses_filtrante, distance_hamming),
                       liste_filtre))
        liste_questions_posees.append(question[0])
        question = question_ideale(liste_filtre, liste_questions_posees)
    return liste_filtre, liste_questions_posees  # TODO renvoyer liste des questions posées
 def test_recuperer_oeuvres(self):
     """
     Teste la méthode du même nom de la classe DataManager
     Permet de récupérer l'ensemble des films/séries se
     trouvant dans la base de données ou bien uniquement
     ceux à réponses incomplètes puis compare avec nos
     prédictions
     (paramètre 'reponses_correctes_completes' passé
     à False dans de cas là)
     """
     # Cas dans lequel on récupère toutes les oeuvres
     obtenu = recuperer_oeuvres(True)
     self.comparaison_liste_oeuvre(obtenu, self.oeuvres_attendues)
     # Cas dans lequel on ne récupère que les films à réponses incomplètes
     self.oeuvres_attendues.pop(1)
     obtenu_2 = recuperer_oeuvres(False)
     self.comparaison_liste_oeuvre(obtenu_2, self.oeuvres_attendues)
def top_question_non_repondues(liste_questions_deja_posees):
    liste_films = recuperer_oeuvres()
    question_freq_absolue = questions_maximisant_esperance(liste_films)
    question_sorted = sorted(question_freq_absolue, key=question_freq_absolue.get)
    liste_non_repondues = list()
    for id_question in question_sorted:
        if id_question not in liste_questions_deja_posees:
            # Requête à la base de données : récupère la question avec l'id correspondant
            liste_non_repondues.append(id_question)
    return liste_non_repondues
 def test_ajouter_oeuvre_proposee(self):
     """
     Ajoute des oeuvreq dans la base de données
     , puis récupère tous les oeuvres présents dans la
     base de données et les comparent aux oeuvres que
     l'on est supposé récupérer, soit les oeuvres qui viennent
     d'être ajouter ainsi que les oeuvres déjà présents dans la
     base de données
     """
     ajouter_oeuvre_proposee("Community", 2009)
     obtenu = recuperer_oeuvres()
     oeuvre_4 = Oeuvre('Community', 2009)
     oeuvre_4.id = 4
     self.oeuvres_attendues.append(oeuvre_4)
     self.comparaison_liste_oeuvre(obtenu, self.oeuvres_attendues)
 def test_supprimer_element(self):
     """
     Supprime des films dans la base de données,
     puis récupère ceux présentss dans la base de données
     et les comparent à ceux qui sont supposés être
     présents dans la base de données, soit tous les
     films à l'exception de ceux qui viennent d'être
     normalement supprimés
     """
     # Suppression d'une oeuvre
     oeuvre = db.session.query(Oeuvre).get(2)
     supprimer_element(oeuvre)
     obtenu = recuperer_oeuvres()
     self.oeuvres_attendues.pop(1)
     self.comparaison_liste_oeuvre(obtenu, self.oeuvres_attendues)
     # Suppression d'une question
     question = db.session.query(Question).get(3)
     obtenu = recuperer_questions()
     supprimer_element(question)
     self.questions_attendues.pop(2)
     self.comparaison_liste_question(obtenu, self.questions_attendues)
def filter_liste_avec_question(liste_questions, liste_reponses, distance_hamming=1):
    """
    Trie une liste de films à partir d'une liste de réponses.
    Cela permet de créer une API Stateless.
    On peut ainsi prédire les questions posées à partir de l'ordre des réponses données.
    :param distance_hamming:
    :param liste_reponses: liste d'entier correpondant aux répoonses données par l'utilisateur.
                Pour référence: 0 correspond à non
                                1 correspond à oui
                                2 correspond à je ne sais pas
                                3 correspond à probablement
                                4 correspond à probablement pas
    :return: tuple (liste_filtree, liste_questions_posees) correspondant à la liste
                des films restant et la liste des questions posees à partir de la liste des réponses
                données par l'utilisateur
    """
    liste_films = recuperer_oeuvres()
    liste_questions_posees = liste_questions[:]  # copié pas en référence
    liste_filtre = liste_films

    liste_filtre = list(
        filter(lambda x: filter_carac(x, liste_questions, liste_reponses, distance_hamming), liste_filtre))
    return liste_filtre, liste_questions_posees  # TODO renvoyer liste des questions posées
def sort_liste_avec_question(liste_questions, liste_reponses):
    liste_films = recuperer_oeuvres()
    liste_films = sorted(liste_films, key=lambda x: freq_occurante(x, liste_questions, liste_reponses), reverse=True)
    return sorted(liste_films, key=lambda x: distance_hamming_films_reponses(x, liste_questions, liste_reponses))