docs: def generate_sample(self, start_state=None, size=1):
          """
          Generator version of self.sample
  
          Return Type:
          ------------
          List of State namedtuples, representing the assignment to all variables of the model.
  
          Examples:
          ---------
          >>> from pgmpy.models.MarkovChain import MarkovChain
          >>> from pgmpy.factors.discrete import State
          >>> model = MarkovChain()
          >>> model.add_variables_from(['intel', 'diff'], [3, 2])
          >>> intel_tm = {0: {0: 0.2, 1: 0.4, 2:0.4}, 1: {0: 0, 1: 0.5, 2: 0.5}, 2: {0: 0.3, 1: 0.3, 2: 0.4}}
          >>> model.add_transition_model('intel', intel_tm)
          >>> diff_tm = {0: {0: 0.5, 1: 0.5}, 1: {0: 0.25, 1:0.75}}
          >>> model.add_transition_model('diff', diff_tm)
          >>> gen = model.generate_sample([State('intel', 0), State('diff', 0)], 2)
          >>> [sample for sample in gen]
          [[State(var='intel', state=2), State(var='diff', state=1)],
           [State(var='intel', state=2), State(var='diff', state=0)]]
          """
          if start_state is None:
              if self.state is None:
                  self.state = self.random_state()
              # else use previously-set state
          else:
              self.set_start_state(start_state)
          # sampled.loc[0] = [self.state[var] for var in self.variables]
  
          for i in range(size):
              for j, (var, st) in enumerate(self.state):
                  next_st = sample_discrete(list(self.transition_models[var][st].keys()),
                                            list(self.transition_models[var][st].values()))[0]
                  self.state[j] = State(var, next_st)
              yield self.state[:]