def testBurstColumns(self):
    tm = TemporalMemory(
      layer=Layer(numCellsPerColumn=4),
      connectedPermanence=0.50,
      minThreshold=1,
      seed=42
    )

    segment1 = tm.layer.columns[0].cells[0].createSegment()
    segment1.createSynapse(presynapticCell=tm.layer.columns[5].cells[3], permanence=0.6)
    segment1.createSynapse(presynapticCell=tm.layer.columns[9].cells[1], permanence=0.4)
    segment1.createSynapse(presynapticCell=tm.layer.columns[119].cells[1], permanence=0.9)

    segment2 = tm.layer.columns[0].cells[0].createSegment()
    segment2.createSynapse(presynapticCell=tm.layer.columns[12].cells[1], permanence=0.9)
    segment2.createSynapse(presynapticCell=tm.layer.columns[0].cells[3], permanence=0.8)

    segment3 = tm.layer.columns[0].cells[1].createSegment()
    segment3.createSynapse(presynapticCell=tm.layer.columns[183].cells[1], permanence=0.7)

    segment4 = tm.layer.columns[27].cells[0].createSegment()
    segment4.createSynapse(presynapticCell=tm.layer.columns[121].cells[2], permanence=0.9)

    activeColumns = set([tm.layer.columns[0],
                         tm.layer.columns[1],
                         tm.layer.columns[26]])
    predictedColumns = set([tm.layer.columns[26]])
    prevActiveCells = set([tm.layer.columns[5].cells[3],
                           tm.layer.columns[9].cells[1],
                           tm.layer.columns[12].cells[1],
                           tm.layer.columns[183].cells[1]])
    prevWinnerCells = set([tm.layer.columns[5].cells[3],
                           tm.layer.columns[9].cells[1],
                           tm.layer.columns[12].cells[1],
                           tm.layer.columns[183].cells[1]])

    (activeCells,
     winnerCells,
     learningSegments) = tm.burstColumns(activeColumns,
                                         predictedColumns,
                                         prevActiveCells,
                                         prevWinnerCells)

    # 5 is the new segment was added to winner cell (6) in column 1
    segment5 = list(tm.layer.columns[1].cells[2].segments)[0]

    self.assertEqual(activeCells, set([tm.layer.columns[0].cells[0],
                                       tm.layer.columns[0].cells[1],
                                       tm.layer.columns[0].cells[2],
                                       tm.layer.columns[0].cells[3],
                                       tm.layer.columns[1].cells[0],
                                       tm.layer.columns[1].cells[1],
                                       tm.layer.columns[1].cells[2],
                                       tm.layer.columns[1].cells[3]]))
    self.assertEqual(winnerCells, set([tm.layer.columns[0].cells[0],
                                       tm.layer.columns[1].cells[2]]))  # 6 is randomly chosen cell
    self.assertEqual(learningSegments, set([segment1, segment5]))
  def testBurstColumnsEmpty(self):
    tm = TemporalMemory()

    activeColumns    = set()
    predictedColumns = set()
    prevActiveCells = set()
    prevWinnerCells = set()

    (activeCells,
     winnerCells,
     learningSegments) = tm.burstColumns(activeColumns,
                                         predictedColumns,
                                         prevActiveCells,
                                         prevWinnerCells)

    self.assertEqual(activeCells,      set())
    self.assertEqual(winnerCells,      set())
    self.assertEqual(learningSegments, set())