code: def _expectation(p, obj1, feat1, obj2, feat2, nghp=None):
      
      if obj2 is None:
          gaussian = Gaussian(p.mu[:-1], p.cov[0, :-1])
          return expectation(gaussian, (obj1, feat1), nghp=nghp)
      elif obj1 is None:
          gaussian = Gaussian(p.mu[1:], p.cov[0, 1:])
          return expectation(gaussian, (obj2, feat2), nghp=nghp)
      else:
          return expectation(p, (obj1, feat1), (obj2, feat2), nghp=nghp)
docs: Nota Bene: if only one object is passed, obj1 is
      associated with x_n, whereas obj2 with x_{n+1}