class_docstr: An observation visualization wrapper allows to apply custom observation visualization functions
  which are then shown in Tensorboard.
  
  :param env: The environment to wrap.
  :param plot_function: The custom matplotlib plotting function.
class_docstr_tok: ["An","observation","visualization","wrapper","allows","to","apply","custom","observation","visualization","functions","which","are","then","shown","in","Tensorboard",".",":","param","env",":","The","environment","to","wrap",".",":","param","plot_function",":","The","custom","matplotlib","plotting","function","."]
docstr: Avoid calling this constructor directly, use :method:`wrap` instead.
docstr_tok: ["Avoid","calling","this","constructor","directly",",","use",":","method",":","`","wrap","`","instead","."]
code: def __init__(self, env: MazeEnv, plot_function: Optional[str]):
      """Avoid calling this constructor directly, use :method:`wrap` instead."""
      super().__init__(env)
  
      # create event topics
      self.observation_events = (
          self.core_env.context.event_service.create_event_topic(
              ObservationVisualizationEvents
          )
      )
  
      # update plot function
      if plot_function is not None:
          function = Factory(Callable).type_from_name(plot_function)
          ObservationVisualizationEvents.observation_to_visualize.tensorboard_render_figure_dict[
              None
          ] = function
  
imports: from abc import ABC
  import warnings
  from typing import TypeVar, Union, Any, Tuple, Dict, Optional, List, Callable
  import matplotlib.pyplot
  import numpy
  from maze.core.annotations import override, unused
  from maze.core.env.action_conversion import ActionType
  from maze.core.env.base_env import BaseEnv
  from maze.core.env.maze_action import MazeActionType
  from maze.core.env.maze_env import MazeEnv
  from maze.core.env.maze_state import MazeStateType
  from maze.core.env.observation_conversion import ObservationType
  from maze.core.env.simulated_env_mixin import SimulatedEnvMixin
  from maze.core.env.structured_env import StructuredEnv
  from maze.core.log_stats.event_decorators import define_plot, define_epoch_stats, define_episode_stats, define_step_stats, define_stats_grouping
  from maze.core.log_stats.reducer_functions import histogram
  from maze.core.utils.factory import Factory
  from maze.core.wrappers.wrapper import Wrapper
label_desc: Use image node_id 1 to create a new ObservationVisualizationWrapper object from inherited base classes: Wrapper with example: obj = ObservationVisualizationWrapper(env, plot_function)