code: def papermill(
      notebook_path,
      output_path,
      parameters,
      parameters_raw,
      parameters_file,
      parameters_yaml,
      parameters_base64,
      inject_input_path,
      inject_output_path,
      inject_paths,
      engine,
      prepare_only,
      kernel,
      cwd,
      progress_bar,
      log_output,
      log_level,
      start_timeout,
      report_mode,
  ):
      
      logging.basicConfig(level=log_level, format="%(message)s")
  
      if progress_bar is None:
          progress_bar = not log_output
  
      # Read in Parameters
      parameters_final = {}
      if inject_input_path or inject_paths:
          parameters_final['PAPERMILL_INPUT_PATH'] = notebook_path
      if inject_output_path or inject_paths:
          parameters_final['PAPERMILL_OUTPUT_PATH'] = output_path
      for params in parameters_base64 or []:
          parameters_final.update(yaml.load(base64.b64decode(params)))
      for files in parameters_file or []:
          parameters_final.update(read_yaml_file(files))
      for params in parameters_yaml or []:
          parameters_final.update(yaml.load(params))
      for name, value in parameters or []:
          parameters_final[name] = _resolve_type(value)
      for name, value in parameters_raw or []:
          parameters_final[name] = value
  
      execute_notebook(
          notebook_path,
          output_path,
          parameters_final,
          engine_name=engine,
          prepare_only=prepare_only,
          kernel_name=kernel,
          progress_bar=progress_bar,
          log_output=log_output,
          start_timeout=start_timeout,
          report_mode=report_mode,
          cwd=cwd,
      )
docs: This utility executes a single notebook on a container.
  
      Papermill takes a source notebook, applies parameters to the source
      notebook, executes the notebook with the specified kernel, and saves the
      output in the destination notebook.