class_docstr: Class to build CEM Policy.
  
  Some notations used in the comments below are:
  
  B: batch_size
  A: action_size
  N: num_samples
  M: num_elites
  
  Supports the following three cases.
  
  1. Nested action_spec containing 1d continuous action.
  2. Nested action_spec containing 1d continuous or discrete action.
  3. Nested action_spec containing 1d continuous action and 1 one_hot action.
  
  Note: all actions need to be 1-d array.
code: def compute_target_q(
      self,
      observation: types.NestedTensorOrArray,
      action: types.NestedTensorOrArray,
      step_type: Optional[tf.Tensor] = None,
      policy_state: Sequence[tf.Tensor] = (),
  ) -> Tuple[tf.Tensor, Sequence[tf.Tensor]]:
      scores, next_policy_state = self._q_network(
          (observation, action),
          step_type=step_type,
          network_state=policy_state,
          training=self._training,
      )  # [B]
      return scores, next_policy_state
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import collections
  from typing import Any, Optional, Sequence, Tuple, Union
  import gin
  import numpy
  import tensorflow
  import tensorflow_probability
  from tf_agents.networks import network
  from tf_agents.networks import utils
  from tf_agents.policies import tf_policy
  from tf_agents.policies.samplers import qtopt_cem_actions_sampler
  from tf_agents.trajectories import policy_step
  from tf_agents.trajectories import time_step
  from tf_agents.typing import types
  from tf_agents.utils import common
  from tf_agents.utils import nest_utils
label_desc: Use image node_id 4 for calling the CEMPolicy obj's underlying member method code with example usage: obj.compute_target_q(observation, action, step_type, policy_state) and returns: scores,  next_policy_state