docstr: Register a signal such that its statistics will be dumped and be viewable through dashboard
  
  :param signal_name: the name of the signal as it will appear in dashboard
  :param dump_one_value_per_episode: should the signal value be written for each episode?
  :param dump_one_value_per_step: should the signal value be written for each step?
  :return: the created signal
docstr_tok: ["Register","a","signal","such","that","its","statistics","will","be","dumped","and","be","viewable","through","dashboard",":","param","signal_name",":","the","name","of","the","signal","as","it","will","appear","in","dashboard",":","param","dump_one_value_per_episode",":","should","the","signal","value","be","written","for","each","episode","?",":","param","dump_one_value_per_step",":","should","the","signal","value","be","written","for","each","step","?",":","return",":","the","created","signal"]
code: def register_signal(
      self,
      signal_name: str,
      dump_one_value_per_episode: bool = True,
      dump_one_value_per_step: bool = False,
  ) -> Signal:
      """
      Register a signal such that its statistics will be dumped and be viewable through dashboard
  
      :param signal_name: the name of the signal as it will appear in dashboard
      :param dump_one_value_per_episode: should the signal value be written for each episode?
      :param dump_one_value_per_step: should the signal value be written for each step?
      :return: the created signal
      """
      signal = Signal(signal_name)
      if dump_one_value_per_episode:
          self.episode_signals.append(signal)
      if dump_one_value_per_step:
          self.step_signals.append(signal)
      return signal
  
imports: import copy
  import random
  from collections import OrderedDict
  from typing import Dict, List, Union, Tuple
  import numpy
  from six.moves import range
  from rl_coach.agents.agent_interface import AgentInterface
  from rl_coach.architectures.network_wrapper import NetworkWrapper
  from rl_coach.base_parameters import AgentParameters, Device, DeviceType, DistributedTaskParameters, Frameworks
  from rl_coach.core_types import RunPhase, PredictionType, EnvironmentEpisodes, ActionType, Batch, Episode, StateType
  from rl_coach.core_types import Transition, ActionInfo, TrainingSteps, EnvironmentSteps, EnvResponse
  from rl_coach.logger import screen, Logger, EpisodeLogger
  from rl_coach.memories.episodic.episodic_experience_replay import EpisodicExperienceReplay
  from rl_coach.saver import SaverCollection
  from rl_coach.spaces import SpacesDefinition, VectorObservationSpace, GoalsSpace, AttentionActionSpace
  from rl_coach.utils import Signal, force_list
  from rl_coach.utils import dynamic_import_and_instantiate_module_from_params
  from rl_coach.memories.backend.memory_impl import get_memory_backend
  from rl_coach.core_types import TimeTypes
  from rl_coach.off_policy_evaluators.ope_manager import OpeManager
  from rl_coach.core_types import PickledReplayBuffer, CsvDataset
label_desc: Use image node_id 8 for calling the Agent obj's underlying member method code with example usage: obj.register_signal(signal_name, dump_one_value_per_episode, dump_one_value_per_step) and returns: signal