code: def sample(self, obs):
      obs = torch.FloatTensor(obs).to(self.device)
      value, action, action_log_probs, action_entropy = self.alg.sample(
          obs
      )
  
      value_numpy = value.cpu().detach().numpy()
      action_numpy = action.cpu().detach().numpy()
      action_log_probs_numpy = action_log_probs.cpu().detach().numpy()
      action_entropy_numpy = action_entropy.cpu().detach().numpy()
      return (
          value_numpy,
          action_numpy,
          action_log_probs_numpy,
          action_entropy_numpy,
      )
  
file_path: PARL/benchmark/torch/ppo/agent.py
imports: import parl
  import torch
  import numpy
  from parl.utils.scheduler import LinearDecayScheduler
label_desc: Use image node_id 3 for calling the PPOAgent obj's underlying member method code with example usage: obj.sample(obs) and returns: value_numpy,  action_numpy,  action_log_probs_numpy,  action_entropy_numpy