code: def select(self, choice_scores):
          
          # if we don't have enough scores to do K-selection, fall back to UCB1
          min_num_scores = min([len(s) for s in choice_scores.values()])
          if min_num_scores >= K_MIN:
              logger.info('{klass}: using Best K bandit selection'.format(klass=type(self).__name__))
              reward_func = self.compute_rewards
          else:
              logger.warning(
                  '{klass}: Not enough choices to do K-selection; using plain UCB1'
                  .format(klass=type(self).__name__))
              reward_func = super(RecentKReward, self).compute_rewards
  
          choice_rewards = {}
          for choice, scores in choice_scores.items():
              if choice not in self.choices:
                  continue
              choice_rewards[choice] = reward_func(scores)
  
          return self.bandit(choice_rewards)
docs: Use the top k learner's scores for usage in rewards for the bandit calculation