code: def get_user_stats(self, users, lang=None, concepts=None, since=None, recalculate=True):
          only_one_user = False
          if not isinstance(users, list):
              users = [users]
              only_one_user = True
          if recalculate:
              if lang is None:
                  raise ValueError('Recalculation without lang is not supported.')
              time_start = time_lib()
              concepts_to_recalculate = Concept.objects.get_concepts_to_recalculate(users, lang, concepts)
              LOGGER.debug("user_stats - getting identifying concepts to recalculate: %ss", (time_lib() - time_start))
              time_start = time_lib()
              self.recalculate_concepts(concepts_to_recalculate, lang)
              LOGGER.debug("user_stats - recalculating concepts: %ss", (time_lib() - time_start))
          qs = self.prepare_related().filter(user__in=users, concept__active=True)
          if concepts is not None:
              qs = qs.filter(concept__in=concepts)
          if lang is not None:
              qs = qs.filter(concept__lang=lang)
          if since is not None:
              qs = qs.filter(time__gte=since)
          data = defaultdict(lambda: defaultdict(lambda: {}))
          for user_stat in qs:
              data[user_stat.user_id][user_stat.concept.identifier][user_stat.stat] = user_stat.value
          if only_one_user:
              return data[users[0].pk if type(users[0]) == User else users[0]]
          return data