code: def grad_local_log_likelihood(self, x):
          
          T, D = self.T, self.D_latent
          assert x.shape == (T, D)
          gfun = grad(self.local_log_likelihood)
  
          g = np.zeros((T, D))
          for t in range(T):
              g[t] += gfun(x[t], self.data[t], self.inputs[t])
          return g
docs: return d/dxt log p(yt | xt)  evaluated at xt
          Optionally override this in base classes