コード例 #1
0
def main(a):
    if a == 1:
        least_recently_used = LRU(3)

        least_recently_used.put("A", 0)
        least_recently_used.put("B", 1)
        least_recently_used.put("C", 2)

        least_recently_used.print_cache_dictionary()
        least_recently_used.print_cache_doubly()
        print()

        least_recently_used.get("A")
        least_recently_used.print_cache_dictionary()
        least_recently_used.print_cache_doubly()
        print()

    else:
        word_list = []
        with open("WORDS") as file:
            line = file.readline().split()
            while line:
                word_list.extend(line)
                line = file.readline().split()

        most_frequent_elements(word_list)
コード例 #2
0
    def main():
        lru_obj = LRU(3)

        #tc1
        assert lru_obj.get('a')==-1
        
        #tc2
        lru_obj.put('a',1)
        lru_obj.put('b',2)
        lru_obj.put('c',3)
        assert lru_obj.get('a')==1, 'Wrong Value'
        
        #tc3
        assert lru_obj.get_cache()== {'a':1, 'b':2, 'c':3}, 'Cache is not updated properly'
        
        #tc4
        lru_obj.put('d',4)
        
        #tc5
        assert len(lru_obj.get_cache())==3, 'capacity crossed'
        
        #tc6
        assert lru_obj.get('b')==-1, 'Least Recently Used is not being removed when capacity is crossed'

        print("All test cases passed!!")
コード例 #3
0
ファイル: db.py プロジェクト: sviswana/6.830Project
    def selectRangeAndInterval(self, startTime, endTime, interval, keyword):
        stime = time.time()
        print "start time in select range and interval", stime
        print "start time in select range and interval process", time.clock()
        interval = interval / 300000
        tick = interval * 60
        numBuckets = interval / 5
        bucketMod = self.setWindow(interval)
        [startFileNumber, startBucket] = self.getNames(startTime) #convert bucket to string
        [endFileNumber, endBucket] = self.getNames(endTime)
        print startFileNumber, endFileNumber

#If timestamps span more than a day, we need to ensure that we get all the buckets in the range
        t = startTime
        finalList = []
        
        for fileNumber in range(startFileNumber, endFileNumber+1):
            if LRU.get(str(fileNumber)) == -1:
                with open(str(fileNumber)+'.txt') as data_file:
                    try:
                        dataMap = json.load(data_file)
                        LRU.set(str(fileNumber), dataMap)
                    except:
                        for i in range(t, endTime+tick, tick):
                            finalList.append((str(i), str(0), keyword))
                        print "end time", time.time()
                        print "end time", time.clock()
                
            dataMap = LRU.get(str(fileNumber))
            if fileNumber == startFileNumber:
                startB = startBucket
                if startFileNumber==endFileNumber:
                    endB = endBucket
                else:
                    endB = bucketMod-1 
            elif fileNumber == endFileNumber+1:
                startB = 0
                endB = endBucket
            else:
                startB = 0
                endB = bucketMod -1
            for bucketNumber in range(startB, endB+1, numBuckets):
                bucketNumber = str(bucketNumber)
               
                total_count = 0
                for bucket in range(int(bucketNumber), int(bucketNumber) + numBuckets):
                    if str(bucket) in dataMap and str(keyword) in dataMap[str(bucket)]:
                        count=dataMap[str(bucket)][str(keyword)]
                        total_count += count
                finalList.append((str(t), str(total_count), keyword))
                t = t+ tick
        if finalList == []:
            for i in range(t, endTime+tick, tick):
                finalList.append((str(i), str(0), keyword))
            print "end time", time.time()
            print "end time", time.clock()
            return finalList       
        print "end time", time.time()     
        print "end time", time.clock()
        return finalList
コード例 #4
0
ファイル: db.py プロジェクト: sviswana/6.830Project
 def selectRange(self, startTimestamp, endTimestamp, keyword):
     [startFileNumber, startBucket] = self.getNames(startTimestamp) 
     [endFileNumber, endBucket] = self.getNames(endTimestamp)
     aggregateCount = 0
     #If timestamps span more than a day, we need to ensure that we get all the buckets in the range
     for fileNumber in range(startFileNumber, endFileNumber+1):
         if fileNumber == startFileNumber:
             startB = startBucket
             if startFileNumber==endFileNumber:
                 endB = endBucket
             else:
                 endB = 287 #hardcoding right now, but can call windowsize if we want this to work for different time ranges
         elif fileNumber == endFileNumber:
             startB = 0
             endB = endBucket
         else:
             startB = 0
             endB = 287
         for bucketNumber in range(startB, endB+1):
             bucketNumber = str(bucketNumber)
             if LRU.get(str(fileNumber)) == -1:
                 with open(str(fileNumber)+'.txt') as data_file:
                     dataMap = json.load(data_file)
                     LRU.set(str(fileNumber), dataMap)
             else:
                 dataMap = LRU.get(str(fileNumber))
             if bucketNumber in dataMap and str(keyword) in dataMap[bucketNumber]:
                 aggregateCount+=dataMap[bucketNumber][str(keyword)]
     return str(aggregateCount)
コード例 #5
0
ファイル: test.py プロジェクト: varungambhir/Inmobi-LRU
 def testGetPut(self):
     obj = LRU(1)
     obj.put(1, 2)
     self.assertEqual(obj.get(1), 2)
     obj.put(1, 4)
     # checkk if value is updated
     self.assertEqual(obj.get(1), 4)
     # check if default value is returned if key isn't there
     self.assertEqual(obj.get(2, "not found"), "not found")
コード例 #6
0
ファイル: db.py プロジェクト: sviswana/6.830Project
    def selectRangeForDisplay(self, startTimestamp, endTimestamp, keyword):
        #sample timestamp is 1449186990 (assuming was divided by 1000 already)
        print "start Time: ", startTimestamp
        if (endTimestamp < startTimestamp):
            return []
        tick = 5 * 60 #seconds to add - assuming window size is 5 here!
        bucketMod = self.setWindow(5)
        print "bucketMod", bucketMod
        [startFileNumber, startBucket] = self.getNames(startTimestamp) #convert bucket to string
        [endFileNumber, endBucket] = self.getNames(endTimestamp)

        print "fileNum", startFileNumber, endFileNumber
        #If timestamps span more than a day, we need to ensure that we get all the buckets in the range
        t = startTimestamp
        finalList = []
        for fileNumber in range(startFileNumber, endFileNumber+1):
            if fileNumber == startFileNumber:
                startB = startBucket
                if startFileNumber==endFileNumber:
                    endB = endBucket
                else:
                    endB = bucketMod-1 
            elif fileNumber == endFileNumber:
                startB = 0
                endB = endBucket
            else:
                startB = 0
                endB = bucketMod -1
            for bucketNumber in range(startB, endB+1):
                bucketNumber = str(bucketNumber)
                if LRU.get(str(fileNumber)) == -1:
                    with open(str(fileNumber)+'.txt') as data_file:
                        try:
                            dataMap = json.load(data_file)
                        except:
                            for i in range(t, endTimestamp+300, 300):
                                finalList.append((str(i), str(0)))
                            return finalList
                        LRU.set(str(fileNumber), dataMap)
                else:
                    dataMap = LRU.get(str(fileNumber))
                if bucketNumber in dataMap and str(keyword) in dataMap[bucketNumber]:
                    count=dataMap[bucketNumber][str(keyword)]
                    finalList.append((str(t), str(count), keyword))
                else:
                    finalList.append((str(t),str(0), keyword))
                t = t+ tick
        if finalList == []:
            for i in range(t, endTimestamp+300, 300):
                finalList.append((str(i), str(0), keyword))
            return finalList
        return finalList
コード例 #7
0
ファイル: db.py プロジェクト: sviswana/6.830Project
 def select(self, timestamp, keyword):
     [filename, bucket] = self.getNames(timestamp)
     bucket = str(bucket)
     keyword = str(keyword)
     #first get the associated page with this data & timestamp
     if LRU.get(str(filename)) == -1:
         with open(str(filename)+'.txt') as data_file:
             dataMap = json.load(data_file)
             LRU.set(str(filename), dataMap)
     else:
         dataMap = LRU.get(str(filename))
     if bucket in dataMap and keyword in dataMap[bucket]:
         return [timestamp, dataMap[bucket][keyword]]
     else:
         return [timestamp, 0]
コード例 #8
0
 def test_get(self):
     obj = LRU('a',1)
     obj.put('a')
     obj.put('b')
     # obj.put('c')
     # print(obj.l)
     self.assertEqual(obj.get(),False)
コード例 #9
0
ファイル: test.py プロジェクト: varungambhir/Inmobi-LRU
 def testLRUItemIsActuallyRemoved(self):
     obj = LRU(4)
     obj.put(1, 1)
     obj.put(2, 1)
     obj.put(3, 1)
     obj.put(4, 1)
     obj.put(1, 1)  # 2 becomes lru
     obj.put(5, 1)
     # now get(2) should return none
     self.assertEqual(obj.get(2), None)
コード例 #10
0
ファイル: LRUTest.py プロジェクト: allurivamsi5/toy-problems
class LRUTest:
    def __init__(self):
        self.lru = LRU()

    def put(self, key):
        return self.lru.put(key)

    def get(self):
        return self.lru.get()

    def get_cache(self):
        return self.lru.get_cache()
コード例 #11
0
ファイル: example.py プロジェクト: varungambhir/Inmobi-LRU
from LRU import LRU
import random

random_cache_size = random.randrange(10)
print("Initiaizing cache of size", random_cache_size)
cache_obj = LRU(random_cache_size)

# returns None as cache is empty
print("1 ->", cache_obj.get(1))

# returns "not found" as it is the default argument
print("1 ->", cache_obj.get(1, "not found"))

cache_obj.put(1, 2)

# prints 2
print("1 ->", cache_obj.get(1))
コード例 #12
0
#!/usr/bin/env python3
from LRU import LRU

datasource = {
    1: "one",
    2: "two",
    3: "three",
    4: "four",
    5: "five",
    6: "six",
    7: "seven",
    8: "eight",
    9: "nine",
    10: "ten"
}

lru = LRU(2, datasource)
print(lru.get(1))
print(lru.get(2))
print(lru.get(3))
print(lru.get(4))
print(lru.get(6))
print(lru.get(3))
print(lru.get(6))
print(lru.get(1))
print(lru.get(2))
print(lru.get(5))
コード例 #13
0
ファイル: db.py プロジェクト: sviswana/6.830Project
    def insert(self,timestamp, keyword, count):
        ##assume values is coming in the python form:
        ##[('clinton', 1),('sanders',1)]
        ##do we want to store individual timestamps as well
        
        filename = timestamp / 86400
        tempTime = timestamp / 300
        bucket = tempTime % 288

        print filename
        if not os.path.isfile(str(filename)+'.txt'):
            print 'file doesnt exist'
            dataMap = {}
            for i in range(0,288):
                dataMap[i] = {}
            with open(str(filename)+'.txt','w') as data_file:
                #json.dump(ast.literal_eval(str(dataMap)), data_file)
                json.dump(dataMap, data_file)
        
        if LRU.get(str(filename)) == -1:
            with open(str(filename)+'.txt') as data_file:
                dataMap = json.load(data_file)
                LRU.set(str(filename), dataMap)
        else:
            dataMap = LRU.get(str(filename))    
        print "current bucket", bucket
        print "previous bucket", self.previousBucket
        if bucket != self.previousBucket:
            self.incrementalCount[timestamp / 300] = {}
            for candidate in self.candidateList:
                if candidate in dataMap[str(self.previousBucket)]:
                    count = dataMap[str(self.previousBucket)][candidate]
                    squaredCount = dataMap[str(self.previousBucket)][candidate] ** 2
                else:
                    count = 0
                    squaredCount = 0
                self.totalCounts[str(candidate)] += count
                self.squaredCounts[str(candidate)] += squaredCount
                newMean = self.updateMean(self.counts[str(candidate)]+1, self.runningMean[str(candidate)], count)
                newVar = self.updateVar(self.counts[str(candidate)]+1, self.totalCounts[str(candidate)], self.squaredCounts[str(candidate)])
                self.runningVar[str(candidate)] = newVar
                self.runningMean[str(candidate)] = newMean
                self.counts[str(candidate)]+=1
                if (timestamp/300 -1) not in self.incrementalCount:
                    self.incrementalCount[timestamp/300][candidate] = 0
                else:
                    self.incrementalCount[timestamp/300][candidate] = self.incrementalCount[timestamp/300 - 1][candidate] +count
                self.incrementalCount["lastTime"] = timestamp/300
            print("COUNTS: ", self.counts)
            print("RUNNING AVERAGE:", self.runningMean)
            print("RUNNING VAR:", self.runningVar)
            print("INCREMENTAL COUNT", self.incrementalCount)
            self.previousBucket = bucket
        #print 'dataMap', dataMap#str(dataMap).replace("u\'","\'")
        #print "bucket", bucket
        keywords = dataMap[str(bucket)]
        bucket = str(bucket)
        #print 'keywords', keywords
        if not keyword in keywords:
            print 'not in keyword so adding'
            dataMap[bucket][keyword] = count 
            #print 'dataMap', dataMap
        else:
            #counts per bucket
            dataMap[bucket][keyword]+=count
        #to get the aggregate counts for each keyword for a day
        if not keyword in dataMap:
            dataMap[keyword] = count
        else:
            dataMap[keyword]+=count
        with open(str(filename)+'.txt', 'w') as outfile:
            print 'writing to json output'
            #print dataMap
            json.dump(dataMap, outfile) ## we don't want to load it every time. 
        return True