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.factors.discrete import DiscreteFactor
          >>> from pgmpy.sampling import GibbsSampling
          >>> from pgmpy.models import MarkovModel
          >>> model = MarkovModel([('A', 'B'), ('C', 'B')])
          >>> factor_ab = DiscreteFactor(['A', 'B'], [2, 2], [1, 2, 3, 4])
          >>> factor_cb = DiscreteFactor(['C', 'B'], [2, 2], [5, 6, 7, 8])
          >>> model.add_factors(factor_ab, factor_cb)
          >>> gibbs = GibbsSampling(model)
          >>> gen = gibbs.generate_sample(size=2)
          >>> [sample for sample in gen]
          [[State(var='C', state=1), State(var='B', state=1), State(var='A', state=0)],
           [State(var='C', state=0), State(var='B', state=1), State(var='A', state=1)]]
          """
  
          if start_state is None and self.state is None:
              self.state = self.random_state()
          elif start_state is not None:
              self.set_start_state(start_state)
  
          for i in range(size):
              for j, (var, st) in enumerate(self.state):
                  other_st = tuple(st for v, st in self.state if var != v)
                  next_st = sample_discrete(list(range(self.cardinalities[var])),
                                            self.transition_models[var][other_st])[0]
                  self.state[j] = State(var, next_st)
              yield self.state[:]