code: def make_sentence(self, init_state=None, **kwargs):
          
          tries = kwargs.get('tries', DEFAULT_TRIES)
          mor = kwargs.get('max_overlap_ratio', DEFAULT_MAX_OVERLAP_RATIO)
          mot = kwargs.get('max_overlap_total', DEFAULT_MAX_OVERLAP_TOTAL)
          test_output = kwargs.get('test_output', True)
          max_words = kwargs.get('max_words', None)
  
          if init_state != None:
              prefix = list(init_state)
              for word in prefix:
                  if word == BEGIN:
                      prefix = prefix[1:]
                  else:
                      break
          else:
              prefix = []
  
          for _ in range(tries):
              words = prefix + self.chain.walk(init_state)
              if max_words != None and len(words) > max_words:
                  continue
              if test_output and hasattr(self, "rejoined_text"):
                  if self.test_sentence_output(words, mor, mot):
                      return self.word_join(words)
              else:
                  return self.word_join(words)
          return None
docs: Attempts `tries` (default: 10) times to generate a valid sentence,
          based on the model and `test_sentence_output`. Passes `max_overlap_ratio`
          and `max_overlap_total` to `test_sentence_output`.
  
          If successful, returns the sentence as a string. If not, returns None.
  
          If `init_state` (a tuple of `self.chain.state_size` words) is not specified,
          this method chooses a sentence-start at random, in accordance with
          the model.
  
          If `test_output` is set as False then the `test_sentence_output` check
          will be skipped.
  
          If `max_words` is specified, the word count for the sentence will be
          evaluated against the provided limit.