示例#1
0
    def test_removeitem(self):
        s = []
        ts = s
        self.assertEqual(Utils.removeItem(s, 0), [])
        self.assertEqual(s, ts)

        s = [[30, 70, 80]]
        ts = s
        self.assertEqual(Utils.removeItem(s, 0), [[70, 80]])
        self.assertEqual(s, ts)

        s = [[70, 80], [90]]
        ts = s
        self.assertEqual(Utils.removeItem(s, Utils.seqLength(s)-1), [[70, 80]])
        self.assertEqual(s, ts)
示例#2
0
文件: MSGSP.py 项目: ragib06/pymsgsp
    def MSCandidateGenSPM(self, F):
        logging.debug('MSCandidateGenSPM: %s', F)

        cs = []
        for s1 in F:
            for s2 in F:
                if self.MS[s1[0][0]] == self.getStrictlyMinimumMIS(s1):
                    if (Utils.removeItem(s1, 1) == Utils.removeItem(s2, Utils.seqLength(s2)-1)) and (self.MS[s2[-1][-1]] >= self.MS[s1[0][0]]): #TODO: need to check why >= here?
                        nc = self.extendSequence(s1, s2, MSCandidateJoinCriteria.FORWARD)
                        for c in nc:
                            cs.append(c)
                            logging.debug('join: %s %s -> %s %d', s1, s2, c, MSCandidateJoinCriteria.FORWARD)
                elif self.MS[s2[-1][-1]] == self.getStrictlyMinimumMIS(s2):
                    if (Utils.removeItem(s2, Utils.seqLength(s2)-2) == Utils.removeItem(s1, 0)) and (self.MS[s1[0][0]] > self.MS[s2[-1][-1]]):
                        nc = self.extendSequence(s1, s2, MSCandidateJoinCriteria.REVERSE)
                        for c in nc:
                            cs.append(c)
                            logging.debug('join: %s %s -> %s %d', s1, s2, c, MSCandidateJoinCriteria.REVERSE)
                else:
                    if Utils.removeItem(s1, 0) == Utils.removeItem(s2, Utils.seqLength(s2)-1):
                        nc = self.extendSequence(s1, s2, MSCandidateJoinCriteria.APRIORI)
                        for c in nc:
                            cs.append(c)
                            logging.debug('join: %s %s -> %s %d', s1, s2, c, MSCandidateJoinCriteria.APRIORI)

        return [c for c in cs if self.canPrune(c) is False]
示例#3
0
文件: MSGSP.py 项目: ragib06/pymsgsp
    def canPrune(self, seq):
        sLowestMIS = self.getStrictlyMinimumMIS(seq)
        k = Utils.seqLength(seq)

        for i in range(k):
            item = Utils.getItem(seq, i)

            if self.MS[item] == sLowestMIS:
                continue

            k_1_subseq = Utils.removeItem(seq, i)

            count = 0
            for d in self.T:
                if Utils.isSubsequence(k_1_subseq, d):
                    count += 1

            if float(count) / len(self.T) < self.getMinMIS(k_1_subseq):
                return True

        return False