예제 #1
0
    def test_max_out_degree(self):
        recommend.MAX_OUT_DEGREE = 1

        recommend.positive(1, 4)
        self.assertTrue(recommend._graph.has_edge(1, 4))
        self.assertFalse(recommend._graph.has_edge(1, 3))
        self.assertFalse(recommend._graph.has_edge(1, 2))
예제 #2
0
    def test_max_in_degree(self):
        recommend.MAX_IN_DEGREE = 1

        recommend.positive(5, 2)
        self.assertTrue(recommend._graph.has_edge(5, 2))
        self.assertFalse(recommend._graph.has_edge(1, 2))
        self.assertFalse(recommend._graph.has_edge(6, 2))
예제 #3
0
    def on_playlist_changed(self, changed_val):
        changed_dict = changed_val.get_dict()

        type = changed_dict["type"]
        if type not in (xmmsclient.PLAYLIST_CHANGED_INSERT,
                        xmmsclient.PLAYLIST_CHANGED_MOVE,
                        xmmsclient.PLAYLIST_CHANGED_REMOVE,
                        xmmsclient.PLAYLIST_CHANGED_REPLACE):
            return True

        if type == xmmsclient.PLAYLIST_CHANGED_REPLACE:
            logging.debug("playlist replaced, resetting")

            self.reset_playlist_cache()
            return True

        pos = changed_dict["position"]
        if type == xmmsclient.PLAYLIST_CHANGED_REMOVE:
            logging.debug("removal dict: %s", changed_dict)

            if pos > 0:
                recommend.negative(self.playlist_entries_cache[pos-1],
                                   self.playlist_entries_cache[pos],
                                   recommend.FEEDBACK_WEIGHT_HIGH)
            del self.playlist_entries_cache[pos]

        elif type == xmmsclient.PLAYLIST_CHANGED_INSERT:
            logging.debug("insert dict: %s", changed_dict)

            mid = changed_dict["id"]
            if self.check_own_insertion(pos, mid):
                weight = recommend.FEEDBACK_WEIGHT_LOW
            else:
                weight = recommend.FEEDBACK_WEIGHT_HIGH

            if pos > 0:
                recommend.positive(self.playlist_entries_cache[pos-1],
                                   mid, weight)

            self.playlist_entries_cache.insert(pos, mid)

        elif type == xmmsclient.PLAYLIST_CHANGED_MOVE:
            logging.debug("move dict: %s", changed_dict)

            mid = changed_dict["id"]
            newpos = changed_dict["newposition"]
            del self.playlist_entries_cache[pos]
            self.playlist_entries_cache.insert(newpos, mid)

            if newpos > 0:
                recommend.positive(self.playlist_entries_cache[newpos-1],
                                   self.playlist_entries_cache[newpos],
                                   recommend.FEEDBACK_WEIGHT_HIGH)

        self.fill_playlist()
        return True