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:
@ -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):
|
||||
|
||||
@ -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')
|
||||
|
||||
@ -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):
|
||||
|
||||
Reference in New Issue
Block a user