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