def testAggregation(self): seg = Segment() self.assertFalse(seg.active) firing = Mock({'is_firing': True}) off = Mock({'is_firing': False}) seg.add_synapse(off) self.assertFalse(seg.active) onRequired = int(FRACTION_SEGMENT_ACTIVATION_THRESHOLD * 100) offRequired = 99 - onRequired #this isn't a hard requirement, just a limitation of the test assert (onRequired >= 2) for _ in xrange(offRequired): seg.add_synapse(off) self.assertFalse(seg.active) for _ in xrange(onRequired - 1): seg.add_synapse(firing) self.assertFalse(seg.active) seg.add_synapse(firing) self.assert_(seg.active)
def __init__(self, htm, x, y, cellsPerColumn): ''' ''' self.htm = htm self.cells = [Cell(self, i) for i in xrange(cellsPerColumn)] self.overlap = 0 #synapses on input/proximal dendrites, forced equal for whole column, in equivalent of single segment self.segment = Segment(distal=False) self.boost = 1 self.x = x self.y = y self.dutyCycleMin = 0 self.dutyCycleActive = 0 self.dutyCycleOverlap = 0 self.active = False
def __init__(self, column=None, layer=None): ''' @param layer the inner layer of the cell, so an HTM with 3 cells per column would have cells with layers 0, 1 and 2 ''' self.column = column self.layer = layer self.active = False self.__wasActive = False #read-only self.predicting = False self.__predicted = False #read-only self.learning = False self.__wasLearning = False #read-only self.predictingNext = None #cached-val self.__predictedNext = False #read-only self.segments = [Segment() for i in xrange(SEGMENTS_PER_CELL)]
def create_segment(self, htm, nextStep): ''' @param htm: the htm network that contains the cell @param nextStep: boolean for whether this segment indicates predicted firing in the very next time step ''' seg = Segment(nextStep=nextStep) #randomly choose input cells, from active non-self cells synapseLen = self.__createSynapses(seg, htm.cells, SYNAPSES_PER_SEGMENT, lambda c: c.wasLearning) if not nextStep and synapseLen < SYNAPSES_PER_SEGMENT: addSynapseLen = SYNAPSES_PER_SEGMENT - synapseLen activeSynapseLen = self.__createSynapses(seg, htm.cells, addSynapseLen, lambda c: c.wasActive) self.segments.append(seg) return seg
def testAdaptation(self): seg = Segment() #for now, just don't crash seg.adapt_up([]) seg.adapt_down([])