code: def run_ipython_notebook(notebook_str):
      
      from runipy.notebook_runner import NotebookRunner
      import nbformat
      import logging
      log_format = '%(asctime)s %(levelname)s: %(message)s'
      log_datefmt = '%m/%d/%Y %I:%M:%S %p'
      logging.basicConfig(
          level=logging.INFO, format=log_format, datefmt=log_datefmt
      )
      #fpath = 'tmp.ipynb'
      #notebook_str = ut.readfrom(fpath)
      #nb3 = IPython.nbformat.reads(notebook_str, 3)
      #cell = nb4.cells[1]
      #self = runner
      #runner = NotebookRunner(nb3, mpl_inline=True)
      print('Executing IPython notebook')
      nb4 = nbformat.reads(notebook_str, 4)
      runner = NotebookRunner(nb4)
      runner.run_notebook(skip_exceptions=False)
      run_nb = runner.nb
      return run_nb
docs: References:
          https://github.com/paulgb/runipy
          >>> from utool.util_ipynb import *  # NOQA