예제 #1
0
파일: TestBQS.py 프로젝트: dxiao/SmootLight
 def test_complex_queries(self):
     validQuery = lambda args:args['Color']==(255,0,0)
     doubleDist = lambda args:geo.dist(args['Location'], (0,0)) <= 20
     
     twoPartPredicate = lambda args:doubleDist(args) and validQuery(args)
     assert bqs.query(twoPartPredicate) == [{'Color':(255,0,0), 'Location':(3,4)}] 
     assert bqs.query([validQuery, doubleDist]) == [{'Color':(255,0,0), 'Location':(3,4)}] 
예제 #2
0
파일: TestBQS.py 프로젝트: dxiao/SmootLight
    def test_dist_query(self):
        validDist = lambda args:geo.dist(args['Location'], (0,0)) <= 5
        invalidDist = lambda args:geo.dist(args['Location'], (0,0)) <= 2
        doubleDist = lambda args:geo.dist(args['Location'], (0,0)) <= 20

        assert bqs.query(validDist) == [{'Color':(255,0,0), 'Location':(3,4)}] 
        assert bqs.query(invalidDist) == [] 
        assert bqs.query(doubleDist) == [{'Color':(255,0,0), 'Location':(3,4)}, {'Color':(0,0,255),\
                                         'Location':(5,12)}] 
예제 #3
0
 def test_simple_query(self):
     validQuery = lambda args: args['Color'] == (255, 0, 0)
     invalidQuery = lambda args: args['Color'] == (254, 0, 0)
     import pdb
     pdb.set_trace()
     assert bqs.query(validQuery) == [{
         'Color': (255, 0, 0),
         'Location': (3, 4),
         'BehaviorId': 'color'
     }]
     assert bqs.query(invalidQuery) == []
예제 #4
0
    def test_complex_queries(self):
        validQuery = lambda args: args['Color'] == (255, 0, 0)
        doubleDist = lambda args: geo.dist(args['Location'], (0, 0)) <= 20

        twoPartPredicate = lambda args: doubleDist(args) and validQuery(args)
        assert bqs.query(twoPartPredicate) == [{
            'Color': (255, 0, 0),
            'Location': (3, 4)
        }]
        assert bqs.query([validQuery, doubleDist]) == [{
            'Color': (255, 0, 0),
            'Location': (3, 4)
        }]
예제 #5
0
    def test_dist_query(self):
        validDist = lambda args: geo.dist(args['Location'], (0, 0)) <= 5
        invalidDist = lambda args: geo.dist(args['Location'], (0, 0)) <= 2
        doubleDist = lambda args: geo.dist(args['Location'], (0, 0)) <= 20

        assert bqs.query(validDist) == [{
            'Color': (255, 0, 0),
            'Location': (3, 4),
            'BehaviorId': 'color'
        }]
        assert bqs.query(invalidDist) == []
        assert bqs.query(doubleDist) == [{'Color':(255,0,0), 'Location':(3,4), 'BehaviorId':'color'}, {'Color':(0,0,255),\
                                         'Location':(5,12), 'BehaviorId':'color'}]
예제 #6
0
 def processResponse(self, sensor, recurs):
     ret = []
     for sensory in sensor:
         opsensory = dict(sensory)
         isNew = self.insertStepIfMissing(opsensory) 
         #TODO: update 19 to be a configurable variable
         if opsensory['isNew'] <= 0:
             results = bqs.query([
                 bqs.getBehaviorIdLambda(self['Id']),\
                 bqs.getDifferentUIDLambda(opsensory['UniqueResponseIdentifier']),\
                 bqs.getDistLambda(opsensory['Location'], 19)
             ])
             if results:
                 opsensory['XStep'] = -opsensory['XStep']
                 opsensory['Location'] = Geo.addLocations((opsensory['XStep'], opsensory['YStep']), opsensory['Location']) 
         else:
             opsensory['isNew'] -= 1
         if isNew:
             opsensory['Location'] = Geo.addLocations((2*opsensory['XStep'], opsensory['YStep']), opsensory['Location']) 
             ret.append(opsensory)
             opsensory2 = dict(opsensory)
             opsensory2['XStep'] = -opsensory2['XStep']
             opsensory2['Location'] = Geo.addLocations((2*opsensory2['XStep'], opsensory2['YStep']), opsensory['Location']) 
             ret.append(opsensory2)
         else:
             opsensory['Location'] = Geo.addLocations((opsensory['XStep'], opsensory['YStep']), opsensory['Location']) 
             ret.append(opsensory)
     return (ret, []) 
예제 #7
0
 def processResponse(self, sensor, recurs):
     ret = []
     for sensory in sensor:
         opsensory = dict(sensory)
         isNew = self.insertStepIfMissing(opsensory) 
         #TODO: update 19 to be a configurable variable
         if opsensory['isNew'] <= 0:
             results = bqs.query([
                 bqs.getBehaviorIdLambda(self['Id']),\
                 bqs.getDifferentUIDLambda(opsensory['UniqueResponseIdentifier']),\
                 bqs.getDistLambda(opsensory['Location'], 19)
             ])
             if results:
                 opsensory['XStep'] = -opsensory['XStep']
                 opsensory['Location'] = Geo.addLocations((opsensory['XStep'], opsensory['YStep']), opsensory['Location']) 
         else:
             opsensory['isNew'] -= 1
         if isNew:
             if opsensory['Direction'] != 0:
                 opsensory['Location'] = Geo.addLocations((2*opsensory['XStep'], opsensory['YStep']), opsensory['Location']) 
                 ret.append(opsensory)
                 opsensory2 = dict(opsensory)
                 opsensory2['XStep'] = -opsensory2['XStep']
                 opsensory2['Location'] = Geo.addLocations((2*opsensory2['XStep'], opsensory2['YStep']), opsensory['Location']) 
                 ret.append(opsensory2)
         else:
             opsensory['Location'] = Geo.addLocations((opsensory['XStep'], opsensory['YStep']), opsensory['Location']) 
             ret.append(opsensory)
     return (ret, []) 
예제 #8
0
 def processResponse(self, sensor, recurs):
     ret = []
     for sensory in sensor:
         opsensory = dict(sensory)
         self.insertStepIfMissing(opsensory) 
         #TODO: update 19 to be a configurable variable
         results = bqs.query([
             bqs.getBehaviorIdLambda(self['Id']),\
             bqs.getDifferentUIDLambda(opsensory['UniqueResponseIdentifier']),\
             bqs.getDistLambda(opsensory['Location'], 19)
         ])
         if results:
             print len(results)
             opsensory['XStep'] = -opsensory['XStep']
             opsensory['Location'] = Geo.addLocations((opsensory['XStep'], opsensory['YStep']), opsensory['Location']) 
         opsensory['Location'] = Geo.addLocations((opsensory['XStep'], opsensory['YStep']), opsensory['Location']) 
         ret.append(opsensory)
     return (ret, []) 
예제 #9
0
 def processResponse(self, sensor, recurs):
     ret = []
     for sensory in sensor:
         opsensory = dict(sensory)
         #TODO: update 19 to be a configurable variable
         self.insertVelIfMissing(opsensory)
         results = bqs.query([
             bqs.getBehaviorIdLambda('accelerate'),\
             bqs.getDirectionLambda('+'),\
             bqs.getDistLambda(opsensory['Location'], 38)
         ])
         if results:
             opsensory['XVel'] = opsensory['XVel'] + 10 
         opsensory['XVel'] = min(max(-1, opsensory['XVel'] - 1), 10)
         opsensory['Location'] = Geo.addLocations((-opsensory['XVel'], 0), opsensory['Location'])
         if opsensory['Location'][0] >= 800: #TODO: Make this dynamic
             opsensory['Location'] = tuple([799, 25])
         ret.append(opsensory)
     return (ret, []) 
예제 #10
0
 def processResponse(self, sensor, recurs):
     ret = []
     for sensory in sensor:
         opsensory = dict(sensory)
         #TODO: update 19 to be a configurable variable
         self.insertVelIfMissing(opsensory)
         results = bqs.query([
             bqs.getBehaviorIdLambda('accelerate'),\
             bqs.getDirectionLambda('+'),\
             bqs.getDistLambda(opsensory['Location'], 38)
         ])
         if results:
             opsensory['XVel'] = opsensory['XVel'] + 10
         opsensory['XVel'] = min(max(-1, opsensory['XVel'] - 1), 10)
         opsensory['Location'] = Geo.addLocations((-opsensory['XVel'], 0),
                                                  opsensory['Location'])
         if opsensory['Location'][0] >= 800:  #TODO: Make this dynamic
             opsensory['Location'] = tuple([799, 25])
         ret.append(opsensory)
     return (ret, [])
예제 #11
0
    def processResponse(self, sensor, recurs):
        ret = []

        if self['NoBounceTime'] != None:
            noBounceTime = self['NoBounceTime']
        else:
            noBounceTime = 1000
        if self['BQSDistance'] != None:
            BQSDistance = self['BQSDistance']
        else:
            BQSDistance = 19


        for sensory in sensor:
            opsensory = dict(sensory)

            isNew = self.insertVelIfMissing(opsensory) 
            if not 'NoBounceTime' in opsensory:
                opsensory['NoBounceTime'] = noBounceTime 

            if opsensory['NoBounceTime'] <= 0:
                results = bqs.query([
                    bqs.getBehaviorIdLambda(self['Id']),\
                    bqs.getDifferentUIDLambda(opsensory['UniqueResponseIdentifier']),\
                    bqs.getDistLambda(opsensory['Location'], BQSDistance)
                ])
                if results:
                    opsensory['XVel'] = -opsensory['XVel']
                    opsensory['Location'] = Geo.addLocations((opsensory['XVel'], opsensory['YVel']), opsensory['Location']) 
            else:
                opsensory['NoBounceTime'] -= 1
            if isNew:
                if opsensory['Direction'] < 0:
                    opsensory['XVel'] = -opsensory['XVel']
                if opsensory['Direction'] != 0:
                    opsensory['Location'] = Geo.addLocations((2*opsensory['XVel'], opsensory['YVel']), opsensory['Location']) 
                    ret.append(opsensory)
            else:
                opsensory['Location'] = Geo.addLocations((opsensory['XVel'], opsensory['YVel']), opsensory['Location']) 
                ret.append(opsensory)
        return (ret, []) 
예제 #12
0
 def processResponse(self, sensor, recurs):
     ret = []
     for sensory in sensor:
         opsensory = dict(sensory)
         self.insertStepIfMissing(opsensory)
         #TODO: update 19 to be a configurable variable
         results = bqs.query([
             bqs.getBehaviorIdLambda(self['Id']),\
             bqs.getDifferentUIDLambda(opsensory['UniqueResponseIdentifier']),\
             bqs.getDistLambda(opsensory['Location'], 19)
         ])
         if results:
             for result in results:
                 new = opsensory['XStep'] + result['XStep']
                 if new >= 0:
                     opsensory['XStep'] = min(20, new)
                 if new < 0:
                     opsensory['XStep'] = max(-20, new)
         opsensory['Location'] = Geo.addLocations(
             (opsensory['XStep'], opsensory['YStep']),
             opsensory['Location'])
         ret.append(opsensory)
     return (ret, [])
예제 #13
0
파일: TestBQS.py 프로젝트: dxiao/SmootLight
 def test_simple_query(self):
     validQuery = lambda args:args['Color']==(255,0,0)
     invalidQuery = lambda args:args['Color']==(254,0,0)
     assert bqs.query(validQuery) == [{'Color':(255,0,0), 'Location':(3,4)}]
     assert bqs.query(invalidQuery) == []
예제 #14
0
    def processResponse(self, sensor, recurs):
        ret = []

        if self['GrowthDirection'] != None:
            growthDirection = self['GrowthDirection']
        else:
            growthDirection = 'right'
        if self['HitSensitivity'] != None:
            hitSensitivity = self['HitSensitivity']
        else:
            hitSensitivity = 4
        if self['MaxVelocity'] != None:
            maxVelocity = self['MaxVelocity']
        else:
            maxVelocity = 10
        if self['MinVelocity'] != None:
            minVelocity = self['MinVelocity']
        else:
            minVelocity = -1
        if self['MinLength'] != None:
            minLength = self['MinLength']
        else:
            minLength = 30

        for sensory in sensor:
            opsensory = dict(sensory)

            if not 'XVel' in opsensory:
                opsensory['XVel'] = -1
            if not 'SpeedupTimer' in opsensory:
                opsensory['SpeedupTimer'] = 0
 
            if growthDirection == 'right':
                results = bqs.query([
                    bqs.getBehaviorIdLambda('accelerate'),\
                    bqs.getDirectionLambda('-'),\
                    bqs.getLeftLambda(0)
                ])
            else:
                compReg.getLock().acquire()
                self.minX, self.minY, self.maxX, self.maxY = compReg.getComponent('Screen').size
                compReg.getLock().release()

                results = bqs.query([
                    bqs.getBehaviorIdLambda('accelerate'),\
                    bqs.getDirectionLambda('+'),\
                    bqs.getRightLambda(self.maxX)
                ])


            if results:
                opsensory['SpeedupTimer'] = hitSensitivity 

            if opsensory['SpeedupTimer'] > 0:
                opsensory['XVel'] = min(opsensory['XVel'] + 1, maxVelocity)
                opsensory['SpeedupTimer'] = opsensory['SpeedupTimer'] - 1
            else:
                opsensory['XVel'] = max(minVelocity, opsensory['XVel'] - 1)

            opsensory['Location'] = (opsensory['Location'][0], opsensory['Location'][1] + opsensory['XVel'])

            #Set min length
            if opsensory['Location'][1] <= minLength:
                opsensory['Location'] = (opsensory['Location'][0], minLength)

            ret.append(opsensory)
        return (ret, []) 
예제 #15
0
 def test_simple_query(self):
     validQuery = lambda args:args['Color']==(255,0,0)
     invalidQuery = lambda args:args['Color']==(254,0,0)
     import pdb; pdb.set_trace()
     assert bqs.query(validQuery) == [{'Color':(255,0,0), 'Location':(3,4), 'BehaviorId':'color'}]
     assert bqs.query(invalidQuery) == []
예제 #16
0
    def processResponse(self, sensor, recurs):
        ret = []

        if self['GrowthDirection'] != None:
            growthDirection = self['GrowthDirection']
        else:
            growthDirection = 'right'
        if self['HitSensitivity'] != None:
            hitSensitivity = self['HitSensitivity']
        else:
            hitSensitivity = 4
        if self['MaxVelocity'] != None:
            maxVelocity = self['MaxVelocity']
        else:
            maxVelocity = 10
        if self['MinVelocity'] != None:
            minVelocity = self['MinVelocity']
        else:
            minVelocity = -1
        if self['MinLength'] != None:
            minLength = self['MinLength']
        else:
            minLength = 30

        for sensory in sensor:
            opsensory = dict(sensory)

            if not 'XVel' in opsensory:
                opsensory['XVel'] = -1
            if not 'SpeedupTimer' in opsensory:
                opsensory['SpeedupTimer'] = 0

            if growthDirection == 'right':
                results = bqs.query([
                    bqs.getBehaviorIdLambda('accelerate'),\
                    bqs.getDirectionLambda('-'),\
                    bqs.getLeftLambda(0)
                ])
            else:
                compReg.getLock().acquire()
                self.minX, self.minY, self.maxX, self.maxY = compReg.getComponent(
                    'Screen').size
                compReg.getLock().release()

                results = bqs.query([
                    bqs.getBehaviorIdLambda('accelerate'),\
                    bqs.getDirectionLambda('+'),\
                    bqs.getRightLambda(self.maxX)
                ])

            if results:
                opsensory['SpeedupTimer'] = hitSensitivity

            if opsensory['SpeedupTimer'] > 0:
                opsensory['XVel'] = min(opsensory['XVel'] + 1, maxVelocity)
                opsensory['SpeedupTimer'] = opsensory['SpeedupTimer'] - 1
            else:
                opsensory['XVel'] = max(minVelocity, opsensory['XVel'] - 1)

            opsensory['Location'] = (opsensory['Location'][0],
                                     opsensory['Location'][1] +
                                     opsensory['XVel'])

            #Set min length
            if opsensory['Location'][1] <= minLength:
                opsensory['Location'] = (opsensory['Location'][0], minLength)

            ret.append(opsensory)
        return (ret, [])