code: def notebook_start(self, **kwargs):
          
          self.set_timer()
  
          self.nb.metadata.papermill['start_time'] = self.start_time.isoformat()
          self.nb.metadata.papermill['end_time'] = None
          self.nb.metadata.papermill['duration'] = None
          self.nb.metadata.papermill['exception'] = None
  
          for cell in self.nb.cells:
              # Reset the cell execution counts.
              if cell.get("execution_count") is not None:
                  cell.execution_count = None
  
              # Clear out the papermill metadata for each cell.
              cell.metadata.papermill = dict(
                  exception=None,
                  start_time=None,
                  end_time=None,
                  duration=None,
                  status=self.PENDING,  # pending, running, completed
              )
              if cell.get("outputs") is not None:
                  cell.outputs = []
  
          self.save()
docs: Initialize a notebook, clearing its metadata, and save it.
  
          When starting a notebook, this initializes and clears the metadata for
          the notebook and its cells, and saves the notebook to the given
          output path.
  
          Called by Engine when execution begins.