コード例 #1
0
 def getBestVariable(self, functionalSentence, functionInfo):
     """ generated source for method getBestVariable """
     # If all the variables that can be set by the functional sentence are in
     # the varOrdering, we return null. Otherwise, we return one of
     # those with the largest domain.
     # The FunctionInfo is sentence-independent, so we need the context
     # of the sentence (which has variables in it).
     tuple_ = GdlUtils.getTupleFromSentence(functionalSentence)
     dependentSlots = functionInfo.getDependentSlots()
     if len(tuple_) != len(dependentSlots):
         raise RuntimeException("Mismatched sentence " + functionalSentence + " and constant form " + functionInfo)
     candidateVars = HashSet()
     i = 0
     while i < len(tuple_):
         if isinstance(term, (GdlVariable, )) and dependentSlots.get(i) and not self.varOrdering.contains(term) and self.varsToAssign.contains(term):
             candidateVars.add(term)
         i += 1
     # Now we look at the domains, trying to find the largest
     bestVar = None
     bestDomainSize = 0
     for var in candidateVars:
         if domainSize > bestDomainSize:
             bestVar = var
             bestDomainSize = domainSize
     return bestVar
コード例 #2
0
ファイル: VariableConstrainer.py プロジェクト: hobson/ggpy
 def getReplacementAssignment(self, sentence, varGen):
     """ generated source for method getReplacementAssignment """
     Preconditions.checkArgument(self.applies(sentence))
     assignment = Maps.newHashMap()
     tuple_ = GdlUtils.getTupleFromSentence(sentence)
     for varIndex in replacementsByOriginalTupleIndex.keySet():
         assignment.put(tuple_.get(varIndex), replacementFunction)
     return assignment
コード例 #3
0
ファイル: VariableConstrainer.py プロジェクト: hobson/ggpy
 def applies(self, sentence):
     """ generated source for method applies """
     if not self.original.matches(sentence):
         return False
     tuple_ = GdlUtils.getTupleFromSentence(sentence)
     for varIndex in replacementsByOriginalTupleIndex.keySet():
         if not (isinstance(, (GdlVariable, ))):
             return False
     return True
コード例 #4
0
ファイル: CondensationIsolator.py プロジェクト: hobson/ggpy
 def getNewFormDomain(cls, condensingRule, oldModel, newForm):
     """ generated source for method getNewFormDomain """
     varDomains = SentenceDomainModels.getVarDomains(condensingRule, oldModel, VarDomainOpts.BODY_ONLY)
     domainsForSlots = Lists.newArrayList()
     for term in GdlUtils.getTupleFromSentence(condensingRule.getHead()):
         if not (isinstance(term, (GdlVariable, ))):
             raise RuntimeException("Expected all slots in the head of a condensing rule to be variables, but the rule was: " + condensingRule)
         domainsForSlots.add(varDomains.get(term))
     return CartesianSentenceFormDomain.create(newForm, domainsForSlots)
コード例 #5
0
 def getVarDomainInSentence(cls, var, conjunct, newPossibleConstantsByForm, curDomain, model):
     """ generated source for method getVarDomainInSentence """
     form = model.getSentenceForm(conjunct)
     tuple_ = GdlUtils.getTupleFromSentence(conjunct)
     domains = Lists.newArrayList()
     i = 0
     while i < len(tuple_):
         if tuple_.get(i) == var:
             domains.add(newPossibleConstantsByForm.get(form).get(i))
             domains.add(curDomain.get(form).get(i))
         i += 1
     return getIntersection(domains)
コード例 #6
0
 def addConstantsFromSentenceIfInOldDomain(cls, newConstantsByForm, oldDomain, model, sentence):
     """ generated source for method addConstantsFromSentenceIfInOldDomain """
     form = model.getSentenceForm(sentence)
     tuple_ = GdlUtils.getTupleFromSentence(sentence)
     if len(tuple_) != form.getTupleSize():
         raise IllegalStateException()
     i = 0
     while i < form.getTupleSize():
         ConcurrencyUtils.checkForInterruption()
         if isinstance(term, (GdlConstant, )):
             if oldDomainForTerm.contains(term):
                 newConstantsByForm.get(form).put(i, term)
         i += 1
コード例 #7
0
 def addPossibleValuesToSentence(cls, neededAndPossibleConstants, sentence, curVar, neededConstantsByForm, model):
     """ generated source for method addPossibleValuesToSentence """
     ConcurrencyUtils.checkForInterruption()
     somethingChanged = False
     form = model.getSentenceForm(sentence)
     tuple_ = GdlUtils.getTupleFromSentence(sentence)
     Preconditions.checkArgument(form.getTupleSize() == len(tuple_))
     i = 0
     while i < len(tuple_):
         if tuple_.get(i) == curVar:
             Preconditions.checkNotNull(neededConstantsByForm.get(form))
             Preconditions.checkNotNull(neededAndPossibleConstants)
             somethingChanged |= neededConstantsByForm.get(form).putAll(i, neededAndPossibleConstants)
         i += 1
     return somethingChanged
コード例 #8
0
ファイル: FunctionInfoImpl.py プロジェクト: hobson/ggpy
 def getProducibleVars(self, sentence):
     """ generated source for method getProducibleVars """
     if not self.form.matches(sentence):
         raise RuntimeException("Sentence " + sentence + " does not match constant form")
     tuple_ = GdlUtils.getTupleFromSentence(sentence)
     candidateVars = HashSet()
     # Variables that appear multiple times go into multipleVars
     multipleVars = HashSet()
     # ...which, of course, means we have to spot non-candidate vars
     nonCandidateVars = HashSet()
     i = 0
     while i < len(tuple_):
         if isinstance(term, (GdlVariable,)) and not multipleVars.contains(term):
             if candidateVars.contains(var) or nonCandidateVars.contains(var):
                 multipleVars.add(var)
                 candidateVars.remove(var)
             elif self.dependentSlots.get(i):
                 candidateVars.add(var)
             else:
                 nonCandidateVars.add(var)
         i += 1
     return candidateVars