Clean up the handling of codelet arguments. NFC.

Just make all argument-passing explicit; which means the coderack
no longer cares about `oldCodelet` (which was being used only to
get the implicit arguments to the new codelet).
This commit is contained in:
Arthur O'Dwyer
2017-04-18 00:36:16 -07:00
parent f08c57fac3
commit fd74290d39
3 changed files with 40 additions and 45 deletions

View File

@ -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):

View File

@ -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')

View File

@ -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):