def clusterSubforms(self): #zmienic na generacje kluczy zredukowanych form reducedKey2nodes = {} subKeyList = list( self.monomials ) reducedKey2form = {} for node in self.node2subforms: coeffs = [] for subKey in subKeyList: coeffs.append(self.node2subforms[node][subKey]) gcd = reduce(math.gcd, coeffs) if gcd != 1: form = CanonicalForm() subforms = self.node2subforms[node] for subKey in subforms: form.subforms[subKey] = subforms[subKey] // gcd reducedKey = form.generateKey() else: form = CanonicalForm() form.subforms = self.node2subforms[node] reducedKey = form.generateKey() if reducedKey in reducedKey2nodes: reducedKey2nodes[reducedKey].add(node) else: reducedKey2nodes[reducedKey] = set([ node ]) reducedKey2form[reducedKey] = form # return reducedKey2nodes, reducedKey2form
def createIntegerForm(self, node, value): newForm = CanonicalForm() newForm.subforms[1] = value self.graph.nodes[node]["form"] = newForm newKey = newForm.generateKey() self.graph.nodes[node]["canonicalKey"] = newKey self.key2uniqueOperatorNodes[newKey] = node
def createPrimeForm(self, node): newSubformKey = self.subformFactory.createSubform(node) newForm = CanonicalForm() newForm.subforms[newSubformKey] = 1 self.graph.nodes[node]["form"] = newForm newKey = newForm.generateKey() self.graph.nodes[node]["canonicalKey"] = newKey self.key2uniqueOperatorNodes[newKey] = node