def __init__(self, lnode, rnode):
        from builtins import builtinp
        self.lnode = lnode
        self.rnode = rnode
        #####Make this opaque
        if isinstance(lnode, BetaNode):
            self.lvars = lnode.pattern
        elif isinstance(lnode, AlphaNode):
            self.lvars = lnode.vars
        self.rvars = rnode.vars
        # Detect builtins
        if isinstance(rnode, AlphaNode):
            if builtinp(self.rnode):
                self.svars = lnode.svars
            else:
                # store svars in lexical order
                self.svars = [v for v in self.lvars if v in self.rvars]
        else:
            self.svars = [v for v in self.lvars if v in self.rvars]
        sortVars(self.svars)  #destructively sort vars
        self.parents = list()
        self.children = list()
        self.pattern = removedups(self.svars + self.lvars + self.rvars)

        # Redundant var, will be refactored out
        self.vars = self.pattern
        self.builtinInput = None
        self.ind = Memory()
        self.inferredFacts = Set()
        # a pointer to the rule node (which contains the rhs)
        self.rule = None
Beispiel #2
0
 def makeBetaNetwork(self, rule, betaNode, alphaNodeList):
     """I have more than 2 alpha nodes and so I make a network"""
     length = len(alphaNodeList)
     if length == 0:
         betaNode.rule = self.makeRuleNode(rule)
         betaNode.rule.betaNode = betaNode
     else:
         alpha = alphaNodeList[0]
         betaChild = self.makeBetaNode(betaNode, alpha)
         # connect our newly created BetaNode to its parent BetaNode,
         # and connect the parent to its child
         betaChild.parents = [betaNode]
         betaNode.children = [betaChild]
         sharedJoinVars = self.getSharedVars(betaNode, alpha)
         sortVars(sharedJoinVars)
         if not builtinp(alpha):
             # adjust our beta node shared variables
             betaNode.svars = sharedJoinVars
             # Our betanode has children, and so set up our
             # pattern in an order that is conducive to the children JOINs
             betaNode.pattern = removedups(sharedJoinVars + betaNode.pattern)
         # connect our AlphaNode to its relevant BetaNode
         alpha.betaNodes = [betaChild]
         self.rete.betaNodeStore.addNode(betaNode)
         self.rete.betaNodeStore.addNode(betaChild)
         alphaNodeList = alphaNodeList[1:]
         return self.makeBetaNetwork(rule, betaChild, alphaNodeList)
Beispiel #3
0
 def makeBetaNetwork(self, rule, betaNode, alphaNodeList):
     """I have more than 2 alpha nodes and so I make a network"""
     length = len(alphaNodeList)
     if length == 0:
         betaNode.rule = self.makeRuleNode(rule)
         betaNode.rule.betaNode = betaNode
     else:
         alpha = alphaNodeList[0]
         betaChild = self.makeBetaNode(betaNode, alpha)
         # connect our newly created BetaNode to its parent BetaNode,
         # and connect the parent to its child
         betaChild.parents = [betaNode]
         betaNode.children = [betaChild]
         sharedJoinVars = self.getSharedVars(betaNode, alpha)
         sortVars(sharedJoinVars)
         if not builtinp(alpha):
             # adjust our beta node shared variables
             betaNode.svars = sharedJoinVars
             # Our betanode has children, and so set up our
             # pattern in an order that is conducive to the children JOINs
             betaNode.pattern = removedups(sharedJoinVars +
                                           betaNode.pattern)
         # connect our AlphaNode to its relevant BetaNode
         alpha.betaNodes = [betaChild]
         self.rete.betaNodeStore.addNode(betaNode)
         self.rete.betaNodeStore.addNode(betaChild)
         alphaNodeList = alphaNodeList[1:]
         return self.makeBetaNetwork(rule, betaChild, alphaNodeList)
Beispiel #4
0
 def __init__(self, lnode, rnode):
     from builtins import builtinp
     self.lnode = lnode
     self.rnode = rnode
     #####Make this opaque
     if isinstance(lnode, BetaNode):
         self.lvars = lnode.pattern
     elif isinstance(lnode, AlphaNode):
         self.lvars = lnode.vars
     self.rvars = rnode.vars
     # Detect builtins
     if isinstance(rnode, AlphaNode):
         if builtinp(self.rnode):
             self.svars = lnode.svars
         else:
             # store svars in lexical order
             self.svars = [v for v in self.lvars if v in self.rvars]
     else:
         self.svars = [v for v in self.lvars if v in self.rvars]
     sortVars(self.svars) #destructively sort vars
     self.parents = list()
     self.children = list()
     self.pattern = removedups(self.svars + self.lvars + self.rvars)
     
     # Redundant var, will be refactored out
     self.vars = self.pattern
     self.builtinInput = None
     self.ind = Memory()
     self.inferredFacts = Set()
     # a pointer to the rule node (which contains the rhs)
     self.rule = None
 def __init__(self, pattern):
     self.pattern = pattern
     #print "pattern", pattern
     self.ind = Memory()  ###ind=memory, or ind=index
     self.betaNodes = list()
     self.vars = [v for v in pattern if isinstance(v, Variable)]
     sortVars(self.vars)
     self.svars = list()
     self.dependents = list()
     self.dependsOn = list()
Beispiel #6
0
 def __init__(self, pattern):        
     self.pattern = pattern
     #print "pattern", pattern
     self.ind = Memory()     ###ind=memory, or ind=index
     self.betaNodes = list()
     self.vars = [v for v in pattern if isinstance(v, Variable)]
     sortVars(self.vars)
     self.svars = list()
     self.dependents = list()
     self.dependsOn = list()
Beispiel #7
0
 def makeBetaNode(self, node1, node2, futureJoins=True):
     sharedVars = self.getSharedVars(node1, node2)        
     # if our left input is an alpha node, then it has the same shared
     # variables as our right input
     if isinstance(node1, AlphaNode):
         node1.svars = sharedVars
         sortVars(node1.svars)
     node2.svars = sharedVars
     sortVars(node2.svars)
     # make new BetaNode
     b = BetaNode(node1, node2)
     # store the shared variables in our new BetaNode
     # the shared vars here will be reset if the beta node has beta children
     b.svars = sharedVars
     # just add the beta node to the index (which is a flat list), no indexing for now
     return b
Beispiel #8
0
 def makeBetaNode(self, node1, node2, futureJoins=True):
     sharedVars = self.getSharedVars(node1, node2)
     # if our left input is an alpha node, then it has the same shared
     # variables as our right input
     if isinstance(node1, AlphaNode):
         node1.svars = sharedVars
         sortVars(node1.svars)
     node2.svars = sharedVars
     sortVars(node2.svars)
     # make new BetaNode
     b = BetaNode(node1, node2)
     # store the shared variables in our new BetaNode
     # the shared vars here will be reset if the beta node has beta children
     b.svars = sharedVars
     # just add the beta node to the index (which is a flat list), no indexing for now
     return b