class_docstr: Object that handles running experiments.
  
  This is mostly the same as discrete_domains.TrainRunner, but is written solely
  for JAX/Flax agents.
class_docstr_tok: ["Object","that","handles","running","experiments",".","This","is","mostly","the","same","as","discrete_domains.TrainRunner",",","but","is","written","solely","for","JAX\/Flax","agents","."]
docstr: Save statistics as tensorboard summaries.
docstr_tok: ["Save","statistics","as","tensorboard","summaries","."]
code: def _save_tensorboard_summaries(
      self,
      iteration,
      num_episodes,
      average_reward,
      average_steps_per_second,
  ):
      """Save statistics as tensorboard summaries."""
      metrics = [
          ("Train/NumEpisodes", num_episodes),
          ("Train/AverageReturns", average_reward),
          ("Train/AverageStepsPerSecond", average_steps_per_second),
      ]
      for name, value in metrics:
          self._summary_writer.scalar(name, value, iteration)
      self._summary_writer.flush()
  
imports: from typing import Optional
  from absl import logging
  from dopamine.discrete_domains import gym_lib
  from dopamine.discrete_domains import iteration_statistics
  from dopamine.discrete_domains import run_experiment
  from dopamine.jax.agents.dqn import dqn_agent
  from dopamine.jax.agents.sac import sac_agent
  from dopamine.labs.sac_from_pixels import deepmind_control_lib
  from dopamine.metrics import collector_dispatcher
  from dopamine.metrics import statistics_instance
  from flax.metrics import tensorboard
  import gin
  from gym import spaces
label_desc: Use image node_id 3 for calling the ContinuousTrainRunner obj's underlying member method code with example usage: obj._save_tensorboard_summaries(iteration, num_episodes, average_reward, average_steps_per_second) without return types