blob: 643b95c582f5c263681e7c38588b0bfde0027d26 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
import types
"""The behavior query system is a module that allows querying behaviors based on lambda-function
predicates."""
def initBQS():
global behaviorList, initialized
behaviorList = []
initialized = True
def addBehavior(behavior):
behaviorList.append(behavior)
def query(predicateList):
"""BehaviorQuerySystem.query takes a list of predicates (functions with signature:
(behavior,output)), and
optionally a behavior to be compared to."""
#want to do queries wrt: behavior itself, the behavior packet, the querying behavior
if isinstance(predicateList, types.FunctionType):
predicateList = [predicateList]
elif not isinstance(predicateList, list):
raise Exception('Predicate list must be a function or list of functions')
global behaviorList, initialized
ret = []
if not initialized:
initBQS()
for behavior in behaviorList: #Consider every behavior
lastOutput = behavior.getLastOutput()
for output in lastOutput: #Look at every element it has output
validOutput = True
for pred in predicateList: #Evaluate every predicate. A predicate is a lambda function that
#takes a dict and returns a bool.
if not pred(output):
validOutput = False
break
if validOutput:
ret.append(output)
return ret
|