diff --git a/copycat/codelet.py b/copycat/codelet.py index dbad36e..b467868 100644 --- a/copycat/codelet.py +++ b/copycat/codelet.py @@ -1,8 +1,8 @@ class Codelet(object): - def __init__(self, name, urgency, currentTime): + def __init__(self, name, urgency, arguments, currentTime): self.name = name self.urgency = urgency - self.arguments = [] + self.arguments = arguments self.birthdate = currentTime def __repr__(self): diff --git a/copycat/codeletMethods.py b/copycat/codeletMethods.py index 712d3bc..a301691 100644 --- a/copycat/codeletMethods.py +++ b/copycat/codeletMethods.py @@ -189,7 +189,7 @@ def bottom_up_description_scout(ctx, codelet): chosen = random.weighted_choice(sliplinks, weights) chosenProperty = chosen.destination coderack.proposeDescription(chosenObject, chosenProperty.category(), - chosenProperty, codelet) + chosenProperty) @codelet('top-down-description-scout') @@ -206,7 +206,7 @@ def top_down_description_scout(ctx, codelet): weights = [n.activation for n in descriptions] chosenProperty = random.weighted_choice(descriptions, weights) coderack.proposeDescription(chosenObject, chosenProperty.category(), - chosenProperty, codelet) + chosenProperty) @codelet('description-strength-tester') @@ -220,7 +220,7 @@ def description_strength_tester(ctx, codelet): strength = description.totalStrength probability = temperature.getAdjustedProbability(strength / 100.0) assert random.coinFlip(probability) - coderack.newCodelet('description-builder', codelet, strength) + coderack.newCodelet('description-builder', strength, [description]) @codelet('description-builder') @@ -260,7 +260,7 @@ def bottom_up_bond_scout(ctx, codelet): category = slipnet.sameness logging.info('proposing %s bond ', category.name) coderack.proposeBond(source, destination, category, bondFacet, - sourceDescriptor, destinationDescriptor, codelet) + sourceDescriptor, destinationDescriptor) @codelet('rule-scout') @@ -275,7 +275,7 @@ def rule_scout(ctx, codelet): #assert len(changedObjects) < 2 # if there are no changed objects, propose a rule with no changes if not changedObjects: - return coderack.proposeRule(None, None, None, None, codelet) + return coderack.proposeRule(None, None, None, None) changed = changedObjects[-1] # generate a list of distinguishing descriptions for the first object @@ -324,7 +324,7 @@ def rule_scout(ctx, codelet): ] relation = random.weighted_choice(objectList, weights) coderack.proposeRule(slipnet.letterCategory, descriptor, - slipnet.letter, relation, codelet) + slipnet.letter, relation) @codelet('rule-strength-tester') @@ -336,7 +336,7 @@ def rule_strength_tester(ctx, codelet): rule.updateStrength() probability = temperature.getAdjustedProbability(rule.totalStrength / 100.0) if random.coinFlip(probability): - coderack.newCodelet('rule-builder', codelet, rule.totalStrength, rule) + coderack.newCodelet('rule-builder', rule.totalStrength, [rule]) @codelet('replacement-finder') @@ -405,11 +405,11 @@ def top_down_bond_scout__category(ctx, codelet): if category == forwardBond: coderack.proposeBond(source, destination, category, bondFacet, sourceDescriptor, - destinationDescriptor, codelet) + destinationDescriptor) else: coderack.proposeBond(destination, source, category, bondFacet, destinationDescriptor, - sourceDescriptor, codelet) + sourceDescriptor) @codelet('top-down-bond-scout--direction') @@ -431,7 +431,7 @@ def top_down_bond_scout__direction(ctx, codelet): if category == slipnet.identity: category = slipnet.sameness coderack.proposeBond(source, destination, category, bondFacet, - sourceDescriptor, destinationDescriptor, codelet) + sourceDescriptor, destinationDescriptor) @codelet('bond-strength-tester') @@ -450,7 +450,7 @@ def bond_strength_tester(ctx, codelet): bond.sourceDescriptor.buffer = 100.0 bond.destinationDescriptor.buffer = 100.0 logging.info("succeeded: posting bond-builder") - coderack.newCodelet('bond-builder', codelet, strength) + coderack.newCodelet('bond-builder', strength, [bond]) @codelet('bond-builder') @@ -533,7 +533,7 @@ def top_down_group_scout__category(ctx, codelet): None, slipnet.letterCategory, [source], []) probability = group.singleLetterGroupProbability() if random.coinFlip(probability): - coderack.proposeSingleLetterGroup(source, codelet) + coderack.proposeSingleLetterGroup(source) return direction = firstBond.directionCategory search = True @@ -578,7 +578,7 @@ def top_down_group_scout__category(ctx, codelet): objects += [source.rightBond.rightObject] source = source.rightBond.rightObject coderack.proposeGroup(objects, bonds, groupCategory, - direction, bondFacet, codelet) + direction, bondFacet) @codelet('top-down-group-scout--direction') @@ -670,7 +670,7 @@ def top_down_group_scout__direction(ctx, codelet): objects += [source.rightBond.rightObject] source = source.rightBond.rightObject coderack.proposeGroup(objects, bonds, groupCategory, - direction, bondFacet, codelet) + direction, bondFacet) #noinspection PyStringFormat @@ -698,7 +698,7 @@ def group_scout__whole_string(ctx, codelet): group = leftmost coderack.proposeGroup(group.objectList, group.bondList, group.groupCategory, group.directionCategory, - group.facet, codelet) + group.facet) return bonds = [] objects = [leftmost] @@ -716,7 +716,7 @@ def group_scout__whole_string(ctx, codelet): assert bonds groupCategory = category.getRelatedNode(slipnet.groupCategory) coderack.proposeGroup(objects, bonds, groupCategory, directionCategory, - bondFacet, codelet) + bondFacet) @codelet('group-strength-tester') @@ -736,7 +736,7 @@ def group_strength_tester(ctx, codelet): group.groupCategory.getRelatedNode(slipnet.bondCategory).buffer = 100.0 if group.directionCategory: group.directionCategory.buffer = 100.0 - coderack.newCodelet('group-builder', codelet, strength) + coderack.newCodelet('group-builder', strength, [group]) @codelet('group-builder') @@ -906,7 +906,7 @@ def bottom_up_correspondence_scout(ctx, codelet): objectFromTarget.relevantDescriptions()) flipTargetObject = True coderack.proposeCorrespondence(objectFromInitial, objectFromTarget, - conceptMappings, flipTargetObject, codelet) + conceptMappings, flipTargetObject) @codelet('important-object-correspondence-scout') @@ -964,7 +964,7 @@ def important_object_correspondence_scout(ctx, codelet): objectFromTarget.relevantDescriptions()) flipTargetObject = True coderack.proposeCorrespondence(objectFromInitial, objectFromTarget, - conceptMappings, flipTargetObject, codelet) + conceptMappings, flipTargetObject) @codelet('correspondence-strength-tester') @@ -991,8 +991,8 @@ def correspondence_strength_tester(ctx, codelet): mapping.initialDescriptor.buffer = 100.0 mapping.targetDescriptionType.buffer = 100.0 mapping.targetDescriptor.buffer = 100.0 - coderack.newCodelet('correspondence-builder', codelet, - strength, correspondence) + coderack.newCodelet('correspondence-builder', + strength, [correspondence]) @codelet('correspondence-builder') diff --git a/copycat/coderack.py b/copycat/coderack.py index 330e5b4..8fab168 100644 --- a/copycat/coderack.py +++ b/copycat/coderack.py @@ -145,8 +145,7 @@ class Coderack(object): continue urgency = getUrgencyBin( node.activation * node.conceptualDepth / 100.0) - codelet = Codelet(codeletName, urgency, self.codeletsRun) - codelet.arguments += [node] + codelet = Codelet(codeletName, urgency, [node], self.codeletsRun) logging.info('Post top down: %s, with urgency: %d', codelet.name, urgency) self.post(codelet) @@ -175,24 +174,20 @@ class Coderack(object): urgency = 5 for _ in xrange(howMany): if random.coinFlip(probability): - codelet = Codelet(codeletName, urgency, self.codeletsRun) + codelet = Codelet(codeletName, urgency, [], self.codeletsRun) self.post(codelet) def removeCodelet(self, codelet): self.codelets.remove(codelet) - def newCodelet(self, name, oldCodelet, strength, arguments=None): + def newCodelet(self, name, strength, arguments): #logging.debug('Posting new codelet called %s' % name) urgency = getUrgencyBin(strength) - newCodelet = Codelet(name, urgency, self.codeletsRun) - if arguments: - newCodelet.arguments = [arguments] - else: - newCodelet.arguments = oldCodelet.arguments + newCodelet = Codelet(name, urgency, arguments, self.codeletsRun) self.post(newCodelet) # pylint: disable=too-many-arguments - def proposeRule(self, facet, description, category, relation, oldCodelet): + def proposeRule(self, facet, description, category, relation): """Creates a proposed rule, and posts a rule-strength-tester codelet. The new codelet has urgency a function of @@ -206,10 +201,10 @@ class Coderack(object): urgency = math.sqrt(depths) * 100.0 else: urgency = 0 - self.newCodelet('rule-strength-tester', oldCodelet, urgency, rule) + self.newCodelet('rule-strength-tester', urgency, [rule]) def proposeCorrespondence(self, initialObject, targetObject, - conceptMappings, flipTargetObject, oldCodelet): + conceptMappings, flipTargetObject): correspondence = Correspondence(self.ctx, initialObject, targetObject, conceptMappings, flipTargetObject) for mapping in conceptMappings: @@ -226,22 +221,22 @@ class Coderack(object): logging.info('urgency: %s, number: %d, bin: %d', urgency, numberOfMappings, binn) self.newCodelet('correspondence-strength-tester', - oldCodelet, urgency, correspondence) + urgency, [correspondence]) - def proposeDescription(self, objekt, type_, descriptor, oldCodelet): + def proposeDescription(self, objekt, type_, descriptor): description = Description(objekt, type_, descriptor) descriptor.buffer = 100.0 urgency = type_.activation self.newCodelet('description-strength-tester', - oldCodelet, urgency, description) + urgency, [description]) - def proposeSingleLetterGroup(self, source, codelet): + def proposeSingleLetterGroup(self, source): slipnet = self.ctx.slipnet self.proposeGroup([source], [], slipnet.samenessGroup, None, - slipnet.letterCategory, codelet) + slipnet.letterCategory) def proposeGroup(self, objects, bondList, groupCategory, directionCategory, - bondFacet, oldCodelet): + bondFacet): slipnet = self.ctx.slipnet bondCategory = groupCategory.getRelatedNode(slipnet.bondCategory) bondCategory.buffer = 100.0 @@ -250,17 +245,17 @@ class Coderack(object): group = Group(objects[0].string, groupCategory, directionCategory, bondFacet, objects, bondList) urgency = bondCategory.bondDegreeOfAssociation() - self.newCodelet('group-strength-tester', oldCodelet, urgency, group) + self.newCodelet('group-strength-tester', urgency, [group]) def proposeBond(self, source, destination, bondCategory, bondFacet, - sourceDescriptor, destinationDescriptor, oldCodelet): + sourceDescriptor, destinationDescriptor): bondFacet.buffer = 100.0 sourceDescriptor.buffer = 100.0 destinationDescriptor.buffer = 100.0 bond = Bond(self.ctx, source, destination, bondCategory, bondFacet, sourceDescriptor, destinationDescriptor) urgency = bondCategory.bondDegreeOfAssociation() - self.newCodelet('bond-strength-tester', oldCodelet, urgency, bond) + self.newCodelet('bond-strength-tester', urgency, [bond]) def chooseOldCodelet(self): # selects an old codelet to remove from the coderack @@ -283,7 +278,7 @@ class Coderack(object): ] for name in codeletsToPost: for _ in xrange(2 * len(workspace.objects)): - codelet = Codelet(name, 1, self.codeletsRun) + codelet = Codelet(name, 1, [], self.codeletsRun) self.post(codelet) def chooseAndRunCodelet(self):