class BaseTopicModel(object):
    def print_topic(self, topicno, topn=10):
        """Get a single topic as a formatted string.

        Parameters
        ----------
        topicno : int
            Topic id.
        topn : int
            Number of words from topic that will be used.

        Returns
        -------
        str
            String representation of topic, like '-0.340 * "category" + 0.298 * "$M$" + 0.183 * "algebra" + ... '.

        """
        return ' + '.join(['%.3f*"%s"' % (v, k) for k, v in self.show_topic(topicno, topn)])

    def print_topics(self, num_topics=20, num_words=10):
        """Get the most significant topics (alias for `show_topics()` method).

        Parameters
        ----------
        num_topics : int, optional
            The number of topics to be selected, if -1 - all topics will be in result (ordered by significance).
        num_words : int, optional
            The number of words to be included per topics (ordered by significance).

        Returns
        -------
        list of (int, list of (str, float))
            Sequence with (topic_id, [(word, value), ... ]).

        """
        return self.show_topics(num_topics=num_topics, num_words=num_words, log=True)

    def get_topics(self):
        """Get words X topics matrix.

        Returns
        --------
        numpy.ndarray:
            The term topic matrix learned during inference, shape (`num_topics`, `vocabulary_size`).

        Raises
        ------
        NotImplementedError

        """
        raise NotImplementedError
