class_docstr: Adds KL coeff updates via `additional_update_for_module()` to Impala logic.
  
  Framework-specific sub-classes must override `_update_module_target_networks()`
  and `_update_module_kl_coeff()`
class_docstr_tok: ["Adds","KL","coeff","updates","via","`","additional_update_for_module","(",")","`","to","Impala","logic",".","Framework-specific","sub-classes","must","override","`","_update_module_target_networks","(",")","`","and","`","_update_module_kl_coeff","(",")","`"]
code: def build(self):
      super().build()
  
      # The current kl coefficients per module as (framework specific) tensor
      # variables.
      self.curr_kl_coeffs_per_module: LambdaDefaultDict[
          ModuleID, Scheduler
      ] = LambdaDefaultDict(
          lambda module_id: self._get_tensor_variable(
              self.config.get_config_for_module(module_id).kl_coeff
          )
      )
  
file_path: ray/python/ray/rllib/algorithms/appo/appo_learner.py
imports: import abc
  from typing import Any, Dict
  from ray.rllib.algorithms.appo.appo import APPOConfig
  from ray.rllib.algorithms.impala.impala_learner import ImpalaLearner
  from ray.rllib.utils.annotations import override
  from ray.rllib.utils.lambda_defaultdict import LambdaDefaultDict
  from ray.rllib.utils.metrics import LAST_TARGET_UPDATE_TS, NUM_TARGET_UPDATES
  from ray.rllib.utils.schedules.scheduler import Scheduler
  from ray.rllib.utils.typing import ModuleID
label_desc: Use image node_id 1 for calling the AppoLearner obj's underlying member method code with example usage: obj.build() without return types