code: def compute(self,
                activeColumns,
                apicalInput=(),
                apicalGrowthCandidates=None,
                learn=True):
      
      activeColumns = np.asarray(activeColumns)
      apicalInput = np.asarray(apicalInput)
  
      if apicalGrowthCandidates is None:
        apicalGrowthCandidates = apicalInput
      apicalGrowthCandidates = np.asarray(apicalGrowthCandidates)
  
      self.prevPredictedCells = self.predictedCells
  
      self.activateCells(activeColumns, self.activeCells, self.prevApicalInput,
                         self.winnerCells, self.prevApicalGrowthCandidates, learn)
      self.depolarizeCells(self.activeCells, apicalInput, learn)
  
      self.prevApicalInput = apicalInput.copy()
      self.prevApicalGrowthCandidates = apicalGrowthCandidates.copy()
docs: Perform one timestep. Activate the specified columns, using the predictions
      from the previous timestep, then learn. Then form a new set of predictions
      using the new active cells and the apicalInput.
  
      @param activeColumns (numpy array)
      List of active columns
  
      @param apicalInput (numpy array)
      List of active input bits for the apical dendrite segments
  
      @param apicalGrowthCandidates (numpy array or None)
      List of bits that the active cells may grow new apical synapses to
      If None, the apicalInput is assumed to be growth candidates.
  
      @param learn (bool)
      Whether to grow / reinforce / punish synapses