code: def build_reward_module(
      self,
      trainer_module: DiscreteCRRTrainer,
      normalization_data_map: Dict[str, NormalizationData],
  ) -> torch.nn.Module:
      assert trainer_module.reward_network is not None
      net_builder = self.cpe_net_builder.value
      return net_builder.build_serving_module(
          trainer_module.reward_network,
          normalization_data_map[NormalizationKey.STATE],
          action_names=self.action_names,
          state_feature_config=self.state_feature_config,
          predictor_wrapper_type=BanditRewardNetPredictorWrapper,
      )
  
imports: import logging
  from typing import Dict, Optional
  import reagent.core.types
  import torch
  from reagent.core.dataclasses import dataclass, field
  from reagent.core.parameters import EvaluationParameters, NormalizationData, NormalizationKey, param_hash
  from reagent.evaluation.evaluator import get_metrics_to_score
  from reagent.gym.policies.policy import Policy
  from reagent.gym.policies.predictor_policies import create_predictor_policy_from_model
  from reagent.model_managers.discrete_dqn_base import DiscreteDQNBase
  from reagent.models.base import ModelBase
  from reagent.net_builder.discrete_actor.fully_connected import FullyConnected
  from reagent.net_builder.discrete_dqn.dueling import Dueling
  from reagent.net_builder.discrete_dqn.fully_connected import FullyConnected
  from reagent.net_builder.unions import DiscreteActorNetBuilder__Union, DiscreteDQNNetBuilder__Union
  from reagent.prediction.cfeval.predictor_wrapper import BanditRewardNetPredictorWrapper
  from reagent.reporting.discrete_crr_reporter import DiscreteCRRReporter
  from reagent.training import CRRTrainerParameters, DiscreteCRRTrainer, ReAgentLightningModule
  from reagent.workflow.types import RewardOptions
label_desc: Use image node_id 12 for calling the DiscreteCRR obj's underlying member method code with example usage: obj.build_reward_module(trainer_module, normalization_data_map) and returns: net_builder