code: def _eval_forward(self, e: torch.Tensor):
      bs = e.shape[0]
      future_g = (
          torch.zeros((bs, self.n_samples, self.n_steps))
          .long()
          .to(e.device)
      )
      ps = torch.ones((bs, self.n_samples)).to(e.device)
      e = e.unsqueeze(1).repeat(1, self.n_samples, 1, 1)
  
      future_g = future_g.view(-1, self.n_steps)
      ps = ps.view(-1)
      e = e.view(-1, e.shape[-2], e.shape[-1])
      for i in range(self.n_steps):
          o_s, z_s = self.core(future_g[:, : i + 1], e)
          future_g[:, i], p_i = sample_from_logits(o_s[:, i])
          ps *= p_i
      future_g = future_g.view(bs, self.n_samples, self.n_steps)
      ps = ps.view(bs, self.n_samples)
      return (
          future_g,
          ps,
          z_s[:, 0].view(bs, self.n_samples, *z_s.shape[2:]).mean(1),
      )
  
imports: import math
  import torch
  import torch.nn.functional
  from open_alpha_tensor.core.modules.attention import AlphaMultiHeadAttention
label_desc: Use image node_id 3 for calling the PolicyHead obj's underlying member method code with example usage: obj._eval_forward(e) and returns: future_g,  ps,  z_s