/* tslint:disable */
/**
 * This file was automatically generated by json-schema-to-typescript.
 * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
 * and run json-schema-to-typescript to regenerate this file.
 */

export type Cell = RawCell | MarkdownCell | CodeCell;
export type Output = ExecuteResult | DisplayData | Stream | Error;

/**
 * Jupyter Notebook v4.5 JSON schema.
 */
export interface JupyterNotebook {
  /**
   * Notebook root-level metadata.
   */
  metadata: {
    /**
     * Kernel information.
     */
    kernelspec?: {
      /**
       * Name of the kernel specification.
       */
      name: string;
      /**
       * Name to display in UI.
       */
      display_name: string;
      [k: string]: unknown;
    };
    /**
     * Kernel information.
     */
    language_info?: {
      /**
       * The programming language which this kernel runs.
       */
      name: string;
      /**
       * The codemirror mode to use for code in this language.
       */
      codemirror_mode?:
        | string
        | {
            [k: string]: unknown;
          };
      /**
       * The file extension for files in this language.
       */
      file_extension?: string;
      /**
       * The mimetype corresponding to files in this language.
       */
      mimetype?: string;
      /**
       * The pygments lexer to use for code in this language.
       */
      pygments_lexer?: string;
      [k: string]: unknown;
    };
    /**
     * Original notebook format (major number) before converting the notebook between versions. This should never be written to a file.
     */
    orig_nbformat?: number;
    /**
     * The title of the notebook document
     */
    title?: string;
    /**
     * The author(s) of the notebook document
     */
    authors?: unknown[];
    [k: string]: unknown;
  };
  /**
   * Notebook format (minor number). Incremented for backward compatible changes to the notebook format.
   */
  nbformat_minor: number;
  /**
   * Notebook format (major number). Incremented between backwards incompatible changes to the notebook format.
   */
  nbformat: 4;
  /**
   * Array of cells of the current notebook.
   */
  cells: Cell[];
}
/**
 * Notebook raw nbconvert cell.
 */
export interface RawCell {
  /**
   * String identifying the type of cell.
   */
  cell_type: "raw";

  /**
   * The cell's ID, added in nbformat 4.5
   */
  id: string;

  /**
   * Cell-level metadata.
   */
  metadata: {
    /**
     * Raw cell metadata format for nbconvert.
     */
    format?: string;
    /**
     * Official Jupyter Metadata for Raw Cells
     */
    jupyter?: {
      [k: string]: unknown;
    };
    /**
     * The cell's name. If present, must be a non-empty string. Cell names are expected to be unique across all the cells in a given notebook. This criterion cannot be checked by the json schema and must be established by an additional check.
     */
    name?: string;

    /**
     * The cell's tags. Tags must be unique, and must not contain commas.
     */
    tags?: string[];
    [k: string]: unknown;
  };
  /**
   * Media attachments (e.g. inline images), stored as mimebundle keyed by filename.
   */
  attachments?: {
    /**
     * The attachment's data stored as a mimebundle.
     *
     * This interface was referenced by `undefined`'s JSON-Schema definition
     * via the `patternProperty` ".*".
     */
    [k: string]: {
      /**
       * mimetype output (e.g. text/plain), represented as either an array of strings or a string.
       */
      [k: string]: string | string[];
    };
  };
  /**
   * Contents of the cell, represented as an array of lines.
   */
  source: string | string[];
}
/**
 * Notebook markdown cell.
 */
export interface MarkdownCell {
  /**
   * String identifying the type of cell.
   */
  cell_type: "markdown";

  /**
     * The cell's ID, added in nbformat 4.5
     */
    id: string;
  
  /**
   * Cell-level metadata.
   */
  metadata: {
    /**
     * The cell's name. If present, must be a non-empty string. Cell names are expected to be unique across all the cells in a given notebook. This criterion cannot be checked by the json schema and must be established by an additional check.
     */
    name?: string;
    /**
     * The cell's tags. Tags must be unique, and must not contain commas.
     */
    tags?: string[];
    /**
     * Official Jupyter Metadata for Markdown Cells
     */
    jupyter?: {
      [k: string]: unknown;
    };
    [k: string]: unknown;
  };
  /**
   * Media attachments (e.g. inline images), stored as mimebundle keyed by filename.
   */
  attachments?: {
    /**
     * The attachment's data stored as a mimebundle.
     *
     * This interface was referenced by `undefined`'s JSON-Schema definition
     * via the `patternProperty` ".*".
     */
    [k: string]: {
      /**
       * mimetype output (e.g. text/plain), represented as either an array of strings or a string.
       */
      [k: string]: string | string[];
    };
  };
  /**
   * Contents of the cell, represented as an array of lines.
   */
  source: string | string[];
}
/**
 * Notebook code cell.
 */
export interface CodeCell {
  /**
   * String identifying the type of cell.
   */
  cell_type: "code";

  /**
   * The cell's ID, added in nbformat 4.5
   */
  id: string;

  /**
   * Cell-level metadata.
   */
  metadata: {
    /**
     * Official Jupyter Metadata for Code Cells
     */
    jupyter?: {
      [k: string]: unknown;
    };
    /**
     * Execution time for the code in the cell. This tracks time at which messages are received from iopub or shell channels
     */
    execution?: {
      /**
       * header.date (in ISO 8601 format) of iopub channel's execute_input message. It indicates the time at which the kernel broadcasts an execute_input message to connected frontends
       */
      "iopub.execute_input"?: string;
      /**
       * header.date (in ISO 8601 format) of iopub channel's kernel status message when the status is 'busy'
       */
      "iopub.status.busy"?: string;
      /**
       * header.date (in ISO 8601 format) of the shell channel's execute_reply message. It indicates the time at which the execute_reply message was created
       */
      "shell.execute_reply"?: string;
      /**
       * header.date (in ISO 8601 format) of iopub channel's kernel status message when the status is 'idle'. It indicates the time at which kernel finished processing the associated request
       */
      "iopub.status.idle"?: string;
      [k: string]: unknown;
    };
    /**
     * Whether the cell's output is collapsed/expanded.
     */
    collapsed?: boolean;
    /**
     * Whether the cell's output is scrolled, unscrolled, or autoscrolled.
     */
    scrolled?: true | false | "auto";
    /**
     * The cell's name. If present, must be a non-empty string. Cell names are expected to be unique across all the cells in a given notebook. This criterion cannot be checked by the json schema and must be established by an additional check.
     */
    name?: string;
    /**
     * The cell's tags. Tags must be unique, and must not contain commas.
     */
    tags?: string[];
    [k: string]: unknown;
  };
  /**
   * Contents of the cell, represented as an array of lines.
   */
  source: string | string[];
  /**
   * Execution, display, or stream outputs.
   */
  outputs: Output[];
  /**
   * The code cell's prompt number. Will be null if the cell has not been run.
   */
  execution_count: number | null;
}
/**
 * Result of executing a code cell.
 */
export interface ExecuteResult {
  /**
   * Type of cell output.
   */
  output_type: "execute_result";
  /**
   * A result's prompt number.
   */
  execution_count: number | null;
  /**
   * A mime-type keyed dictionary of data
   */
  data: {
    /**
     * mimetype output (e.g. text/plain), represented as either an array of strings or a string.
     */
    [k: string]: string | string[];
  };
  /**
   * Cell output metadata.
   */
  metadata: {
    [k: string]: unknown;
  };
}
/**
 * Data displayed as a result of code cell execution.
 */
export interface DisplayData {
  /**
   * Type of cell output.
   */
  output_type: "display_data";
  /**
   * A mime-type keyed dictionary of data
   */
  data: {
    /**
     * mimetype output (e.g. text/plain), represented as either an array of strings or a string.
     */
    [k: string]: string | string[];
  };
  /**
   * Cell output metadata.
   */
  metadata: {
    [k: string]: unknown;
  };
}
/**
 * Stream output from a code cell.
 */
export interface Stream {
  /**
   * Type of cell output.
   */
  output_type: "stream";
  /**
   * The name of the stream (stdout, stderr).
   */
  name: string;
  /**
   * The stream's text output, represented as an array of strings.
   */
  text: string | string[];
}
/**
 * Output of an error that occurred during code cell execution.
 */
export interface Error {
  /**
   * Type of cell output.
   */
  output_type: "error";
  /**
   * The name of the error.
   */
  ename: string;
  /**
   * The value, or message, of the error.
   */
  evalue: string;
  /**
   * The error's traceback, represented as an array of strings.
   */
  traceback: string[];
}
