code: def on_train_result(self, *, algorithm, result: dict, **kwargs):
      stats = result["info"][LEARNER_INFO][DEFAULT_POLICY_ID]
      # Entropy coeff goes to 0.05, then 0.0 (per iter).
      check(
          stats[LEARNER_RESULTS_CURR_ENTROPY_COEFF_KEY],
          0.05 if algorithm.iteration == 1 else 0.0,
      )
  
      # Learning rate should decrease by 0.0001/4 per iteration.
      check(
          stats[LEARNER_RESULTS_CURR_LR_KEY],
          0.0000075 if algorithm.iteration == 1 else 0.000005,
      )
      # Compare reported curr lr vs the actual lr found in the optimizer object.
      optim = algorithm.learner_group._learner.get_optimizer()
      actual_optimizer_lr = (
          optim.param_groups[0]["lr"]
          if algorithm.config.framework_str == "torch"
          else optim.lr
      )
      check(stats[LEARNER_RESULTS_CURR_LR_KEY], actual_optimizer_lr)
  
file_path: ray/python/ray/rllib/algorithms/ppo/tests/test_ppo_with_env_runner.py
imports: import unittest
  import ray
  import ray.rllib.algorithms.ppo
  from ray.rllib.algorithms.ppo.ppo_learner import LEARNER_RESULTS_CURR_ENTROPY_COEFF_KEY
  from ray.rllib.algorithms.callbacks import DefaultCallbacks
  from ray.rllib.core.learner.learner import LEARNER_RESULTS_CURR_LR_KEY
  from ray.rllib.env.single_agent_env_runner import SingleAgentEnvRunner
  from ray.rllib.policy.sample_batch import DEFAULT_POLICY_ID
  from ray.rllib.utils.metrics.learner_info import LEARNER_INFO
  from ray.rllib.utils.test_utils import check, check_train_results, framework_iterator
label_desc: Use image node_id 1 for calling the MyCallbacks obj's underlying member method code with example usage: obj.on_train_result() without return types