code: def __init__(
      self,
      actor_num_params: int,
      critic_num_params: int,
      enable_grad_checkpoint: bool = False,
      ignore_first_episodes: int = 1,
  ) -> None:
      super().__init__()
      self.world_size = get_world_size()
      self.actor_num_params = actor_num_params
      self.critic_num_params = critic_num_params
      self.enable_grad_checkpoint = enable_grad_checkpoint
      self.ignore_first_episodes = ignore_first_episodes
      self.ignore_this_episode = False
  
      self.episode_timer = Timer()
      self.batch_timer = Timer()
      self.update_timer = Timer()
      self.total_samples: int = 0
      self.learn_flop: int = 0
  
      print_rank_0(
          f"Trainer actor: {self.actor_num_params/1024**3:.2f}B, critic: {self.critic_num_params/1024**3:.2f}B, world size: {self.world_size}"
      )
  
imports: from time import time
  from typing import Optional
  import torch
  import torch.distributed
  from coati.experience_maker import Experience
  from .base import MakerCallback, TrainerCallback
label_desc: Use image node_id 1 to create a new TrainerPerformanceEvaluator object from inherited base classes: TrainerCallback with example: obj = TrainerPerformanceEvaluator(actor_num_params, critic_num_params, enable_grad_checkpoint, ignore_first_episodes)