docs: def _load( self, fn ):
          """Retrieve the notebook from the given file.
  
          :param fn: the file name"""
  
          # if file is empty, create an empty notebook
          if os.path.getsize(fn) == 0:
              self._description = None
              self._results = dict()
              self._pending = dict()
          else:
              # load the JSON object
              with open(fn, "r") as f:
                  s = f.read()
  
                  # parse back into appropriate variables
                  j = json.loads(s)
                  self._description = j['description']
                  self._pending = dict(j['pending'])
                  self._results = j['results']
  
                  # perform any post-load patching
                  self.patch()