class_docstr: Rendering class for the 2D cutting env.
  
  The ``Cutting2DRenderer`` will show the selected piece (the maze_action) on the left,
  plus the current state of the inventory on the right
class_docstr_tok: ["Rendering","class","for","the","2D","cutting","env",".","The","``","Cutting2DRenderer","``","will","show","the","selected","piece","(","the","maze_action",")","on","the","left",",","plus","the","current","state","of","the","inventory","on","the","right"]
docstr: Render maze_state and maze_action of the cutting 2D env.
  
  :param maze_state: MazeState to render
  :param maze_action: MazeAction to render
  :param events: Events logged during the step (not used)
docstr_tok: ["Render","maze_state","and","maze_action","of","the","cutting","2D","env",".",":","param","maze_state",":","MazeState","to","render",":","param","maze_action",":","MazeAction","to","render",":","param","events",":","Events","logged","during","the","step","(","not","used",")"]
code: def render(
      self,
      maze_state: Cutting2DMazeState,
      maze_action: Optional[Cutting2DMazeAction],
      events: StepEventLog,
  ) -> None:
      """
      Render maze_state and maze_action of the cutting 2D env.
  
      :param maze_state: MazeState to render
      :param maze_action: MazeAction to render
      :param events: Events logged during the step (not used)
      """
  
      plt.figure("Cutting 2D", figsize=(8, 4))
      plt.clf()
  
      # The maze_action taken
  
      plt.subplot(121, aspect="equal")
      if maze_action is not None:
          self._plot_maze_action(maze_action, "MazeAction", maze_state)
      else:
          self._add_title("MazeAction (none)")
  
      # The inventory state
      plt.subplot(122, aspect="equal")
      self._plot_inventory(maze_state, maze_action)
  
      plt.tight_layout()
      plt.draw()
      plt.pause(0.1)
  
file_path: maze/tutorials/tutorial_maze_env/part03_maze_env/env/renderer.py
imports: from typing import Tuple, Optional
  import numpy
  import matplotlib.patches
  import matplotlib.pyplot
  from maze.core.annotations import override
  from maze.core.log_events.step_event_log import StepEventLog
  from maze.core.rendering.renderer import Renderer
  from .maze_action import Cutting2DMazeAction
  from .maze_state import Cutting2DMazeState
label_desc: Use image node_id 1 for calling the Cutting2DRenderer obj's underlying member method code with example usage: obj.render(maze_state, maze_action, events) without return types