class_docstr: A CQL-SAC Agent based on the SAC Agent.
docstr: Gets the Q-values of target_input.
  
  Uses the smaller of the critic network outputs since learned Q functions
  can overestimate Q-values.
  
  Args:
    target_input: Tuple of (observation, sampled actions) tensors.
    step_type: `Tensor` of `StepType` enum values.
    reshape_batch_size: Batch size to reshape the Q values to [batch_size,
      self._num_cql_samples, ...]. If None, do not reshape.
    training: Whether training should be applied.
  
  Returns:
    Tuple[`Tensor`, `Tensor`] of Q-values.
docstr_tok: ["Gets","the","Q-values","of","target_input",".","Uses","the","smaller","of","the","critic","network","outputs","since","learned","Q","functions","can","overestimate","Q-values",".","Args",":","target_input",":","Tuple","of","(","observation",",","sampled","actions",")","tensors",".","step_type",":","`","Tensor","`","of","`","StepType","`","enum","values",".","reshape_batch_size",":","Batch","size","to","reshape","the","Q","values","to","[","batch_size",",","self._num_cql_samples",",","...","]",".","If","None",",","do","not","reshape",".","training",":","Whether","training","should","be","applied",".","Returns",":","Tuple","[","`","Tensor","`",",","`","Tensor","`","]","of","Q-values","."]
code: def _get_q_values(
      self,
      target_input: Tuple[types.Tensor, types.Tensor],
      step_type: types.Tensor,
      reshape_batch_size: Optional[int],
      training: Optional[bool] = False,
  ) -> Tuple[types.Tensor, types.Tensor]:
      """Gets the Q-values of target_input.
  
      Uses the smaller of the critic network outputs since learned Q functions
      can overestimate Q-values.
  
      Args:
        target_input: Tuple of (observation, sampled actions) tensors.
        step_type: `Tensor` of `StepType` enum values.
        reshape_batch_size: Batch size to reshape the Q values to [batch_size,
          self._num_cql_samples, ...]. If None, do not reshape.
        training: Whether training should be applied.
  
      Returns:
        Tuple[`Tensor`, `Tensor`] of Q-values.
      """
      q_values1, _ = self._critic_network_1(
          target_input, step_type, training=training
      )
      q_values2, _ = self._critic_network_2(
          target_input, step_type, training=training
      )
  
      # Optionally reshape to [batch_size, num_cql_samples, q_value_dim].
      if reshape_batch_size is not None:
          reshaped_dims = [
              reshape_batch_size,
              self._num_cql_samples,
          ] + (q_values1.shape.as_list()[1:])
          q_values1 = tf.reshape(q_values1, reshaped_dims)
          q_values2 = tf.reshape(q_values2, reshaped_dims)
  
      q_values1 = tf.expand_dims(q_values1, axis=-1)
      q_values2 = tf.expand_dims(q_values2, axis=-1)
      return q_values1, q_values2
  
imports: from typing import Callable, Dict, NamedTuple, Optional, Text, Tuple, Union
  import gin
  import tensorflow
  import tensorflow_probability
  from tf_agents.agents import tf_agent
  from tf_agents.agents.sac import sac_agent
  from tf_agents.networks import network
  from tf_agents.policies import actor_policy
  from tf_agents.policies import tf_policy
  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
  from tf_agents.utils import object_identity
label_desc: Use image node_id 8 for calling the CqlSacAgent obj's underlying member method code with example usage: obj._get_q_values(target_input, step_type, reshape_batch_size, training) and returns: q_values1,  q_values2