class_docstr: Critic Regularized Regression (CRR) algorithm trainer
  as described in https://arxiv.org/abs/2006.15134
code: def compute_target_q_values(
      self, next_state, rewards, not_terminal, next_q_values
  ):
      if self.use_target_actor:
          next_state_actor_output = self.actor_network_target(
              next_state
          ).action
      else:
          next_state_actor_output = self.actor_network(
              next_state
          ).action
  
      next_dist = pyd.Categorical(logits=next_state_actor_output)
      next_V = (next_q_values * next_dist.probs).sum(
          dim=1, keepdim=True
      )
      if self.q2_network is not None:
          next_q2_values = self.q2_network_target(next_state)
          next_V2 = (next_q2_values * next_dist.probs).sum(
              dim=1, keepdim=True
          )
          next_V = torch.min(next_V, next_V2)
  
      target_q_values = (
          rewards + self.gamma * next_V * not_terminal.float()
      )
      return target_q_values
  
imports: import logging
  from typing import List, Tuple
  import reagent.core.types
  import torch
  import torch.nn.functional
  from reagent.core.configuration import resolve_defaults
  from reagent.core.dataclasses import field
  from reagent.core.parameters import EvaluationParameters, RLParameters
  from reagent.optimizer import Optimizer__Union, SoftUpdate
  from reagent.training.dqn_trainer_base import DQNTrainerBaseLightning
  from torch import distributions
label_desc: Use image node_id 5 for calling the DiscreteCRRTrainer obj's underlying member method code with example usage: obj.compute_target_q_values(next_state, rewards, not_terminal, next_q_values) and returns: target_q_values