code: def act(
      self,
      obs: rlt.FeatureData,
      possible_actions_mask: Optional[torch.Tensor] = None,
  ) -> rlt.ActorOutput:
      greedy = self.cem_planner_network(obs)
      if self.discrete_action:
          _, onehot = greedy
          return rlt.ActorOutput(
              action=onehot.unsqueeze(0), log_prob=torch.tensor(0.0)
          )
      else:
          return rlt.ActorOutput(
              action=greedy.unsqueeze(0), log_prob=torch.tensor(0.0)
          )
  
imports: import logging
  from typing import Dict, Optional
  import numpy
  import reagent.core.types
  import torch
  from reagent.core.dataclasses import dataclass, field
  from reagent.core.parameters import CEMTrainerParameters, NormalizationData, NormalizationKey, param_hash
  from reagent.gym.policies.policy import Policy
  from reagent.model_managers.model_based.world_model import WorldModel
  from reagent.model_managers.world_model_base import WorldModelBase
  from reagent.models.cem_planner import CEMPlannerNetwork
  from reagent.preprocessing.identify_types import CONTINUOUS_ACTION
  from reagent.preprocessing.normalization import get_num_output_features
  from reagent.training import ReAgentLightningModule
  from reagent.training.cem_trainer import CEMTrainer
  from reagent.workflow.types import RewardOptions
label_desc: Use image node_id 2 for calling the CEMPolicy obj's underlying member method code with example usage: obj.act(obs, possible_actions_mask) and returns: rlt, rlt