class_docstr: Trajectory viewer for Jupyter Notebooks, built using ipython widgets.
  
  Displays trajectory data for the given episode as an interactive view, where the step ID and any additional
  arguments exposed by the renderer can be interactively set. The data is rendered using the renderer recorded
  in the episode record.
  
  :param episode_record: Trajectory data to render.
class_docstr_tok: ["Trajectory","viewer","for","Jupyter","Notebooks",",","built","using","ipython","widgets",".","Displays","trajectory","data","for","the","given","episode","as","an","interactive","view",",","where","the","step","ID","and","any","additional","arguments","exposed","by","the","renderer","can","be","interactively","set",".","The","data","is","rendered","using","the","renderer","recorded","in","the","episode","record",".",":","param","episode_record",":","Trajectory","data","to","render","."]
docstr: Build and show the interactive widgets.
  
  Builds all the widgets (one for step ID, then one for each additional argument accepted by the renderer)
  and activates them using the interact function. Expected to be called from a cell in a Jupyter notebook.
docstr_tok: ["Build","and","show","the","interactive","widgets",".","Builds","all","the","widgets","(","one","for","step","ID",",","then","one","for","each","additional","argument","accepted","by","the","renderer",")","and","activates","them","using","the","interact","function",".","Expected","to","be","called","from","a","cell","in","a","Jupyter","notebook","."]
code: def build(self) -> None:
      """Build and show the interactive widgets.
  
      Builds all the widgets (one for step ID, then one for each additional argument accepted by the renderer)
      and activates them using the interact function. Expected to be called from a cell in a Jupyter notebook.
      """
      from ipywidgets import interact
  
      step_count = len(self.episode_record.step_records)
      step_id_argument: RendererArg = IntRangeArg(
          name="step_id",
          title="Step ID",
          min_value=0,
          max_value=(step_count - 1),
      )
      arguments = [step_id_argument] + self.renderer.arguments()
      widgets = {arg.name: arg.create_widget() for arg in arguments}
      interact(self.render, **widgets)
  
imports: from maze.core.rendering.renderer_args import RendererArg, IntRangeArg
  from maze.core.trajectory_recording.records.trajectory_record import StateTrajectoryRecord
label_desc: Use image node_id 2 for calling the NotebookTrajectoryViewer obj's underlying member method code with example usage: obj.build() without return types