Finds all UserStats of given concepts and users.
        Recompute UserStats if necessary

        Args:
            users (Optional[list of users] or [user]): list of primary keys of user or users
                Defaults to None meaning all users.
            lang (string): use only concepts witch the lang. Defaults to None meaning all languages.
            concepts (Optional[list of concepts]): list of primary keys of concepts or concepts
                Defaults to None meaning all concepts.

        Returns:
            dict: user_id  -> dict (concept_identifier - > (stat_name  -> value)) -- for more users
            dict: concept_identifier - > (stat_name  -> value) -- for one user

def get_user_stats(self, users, lang=None, concepts=None, since=None, recalculate=True):
        """
        Finds all UserStats of given concepts and users.
        Recompute UserStats if necessary

        Args:
            users (Optional[list of users] or [user]): list of primary keys of user or users
                Defaults to None meaning all users.
            lang (string): use only concepts witch the lang. Defaults to None meaning all languages.
            concepts (Optional[list of concepts]): list of primary keys of concepts or concepts
                Defaults to None meaning all concepts.

        Returns:
            dict: user_id  -> dict (concept_identifier - > (stat_name  -> value)) -- for more users
            dict: concept_identifier - > (stat_name  -> value) -- for one user
        """
        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