def infer(self, bottomUpInput):
    """
    Parameters:
    --------------------------------------------
    input:        Current bottom-up input, dense
    retval:       ?
    """

    self.iterationIdx = self.iterationIdx + 1

    if self.verbosity >= 3:
      print "\n==== Iteration: %d =====" % (self.iterationIdx)
      print "Active cols:", bottomUpInput.nonzero()[0]

    # Copy t into t-1
    # Don't need to copy learnState, which is not used in inference
    self.activeState['t-1'][:,:] = self.activeState['t'][:,:]
    self.predictedState['t-1'][:,:] = self.predictedState['t'][:,:]
    self.confidence['t-1'][:,:] = self.confidence['t'][:,:]
    self.activeState['t'].fill(0)
    self.predictedState['t'].fill(0)
    self.confidence['t'].fill(0.0)

    # Phase 1: calculate current state for each cell
    # For each column (winning in the SP):
    # - if the bottom up input was predicted by one of the sequence
    #   segments of a cell, this cell bursts,
    # - if the bottom up input was not predicted by any cell, the entire
    #   column bursts.
    activeColumns = bottomUpInput.nonzero()[0]

    for c in activeColumns:

      buPredicted = False
      predictingCells = numpy.where(self.predictedState['t-1'][c] == 1)[0]

      for i in predictingCells:
        buPredicted = True
        self.activeState['t'][c,i] = 1

      if not buPredicted:
        self.activeState['t'][c,:] = 1 # whole column bursts

    # Phase 2: calculate predictive output for each cell
    # A cell turns on its predictedState if any of its segments
    # has enough horizontal connections currently firing due to
    # bottom up input.
    self.computePhase2(doLearn=False)

    # Update the prediction score stats
    if self.collectStats:
      # import pdb; pdb.set_trace()
      self._updateStatsInferEnd(self._internalStats,
                                activeColumns,
                                self.predictedState['t-1'],
                                self.confidence['t-1'])



    # Get the output
    output = self.computeOutput()

    # Print diagnostic information based on the current verbosity level
    self.printComputeEnd(output, learn=False)

    self.resetCalled = False

    return output
Parameters:
    --------------------------------------------
    input:        Current bottom-up input, dense
    retval:       ?