o
    tf%                  	   @  s   d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	 ddl
mZ ddlmZ dd	lmZmZ d
d Zd)ddZdd Zdd ZdddddddddZdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( ZdS )*z-Code for converting notebooks to and from v3.    )annotationsN)
get_logger)v3	validator)generate_corpus_id)NotebookNode   )nbformatnbformat_minorc              
   C  sZ   ddl m}m} z	|| |d W dS  |y, } zt d|| W Y d}~dS d}~ww )z(Log validation errors, if there are any.r   )ValidationErrorvalidate)versionz"Notebook JSON is not valid v%i: %sN)r	   r   r   r   error)nbr   r   r   e r   \/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/nbformat/v4/convert.py_warn_if_invalid   s   r   c           	      C  s<  |s| d }|sd| vr|dkrd}t |d}n| d }|dkrwt| | | dd}| d	d}|p6d| j_|p<d| j_t| _t| _g  | d
< }| dg D ]}|d
 D ]	}|	t
| qWqQ| jdd | jdd t| t | S |dkr|tkr| S |dk r| jD ]}t |_q|| j_t| _| S td| )aW  Convert a notebook to latest v4.

    Parameters
    ----------
    nb : NotebookNode
        The Python representation of the notebook to convert.
    from_version : int
        The original version of the notebook to convert.
    from_minor : int
        The original minor version of the notebook to convert (only relevant for v >= 3).
    r	   r
      zEThe v4 notebook does not include the nbformat minor, which is needed.r      orig_nbformatNorig_nbformat_minorcells
worksheetsname 	signature   zZCannot convert a notebook directly from v%s to v4.  Try using the nbformat.convert module.)r   r   r   popmetadatar   r   r	   r
   appendupgrade_cellr   random_cell_idid
ValueError)	r   Zfrom_versionZ
from_minormsgr   r   r   wscellr   r   r   upgrade   sP   




r(   c                 C  s   |  dt  t | _| jdkr8| dd d| v r"| d| jd< | dd| _| dd| _t	| j
| _
| S | jd	kr[d
| _| dd}djd| d| dd d| _| S | jdkrcd
| _| S )zupgrade a cell from v3 to v4

    heading cell:
        - -> markdown heading
    code cell:
        - remove language metadata
        - cell.input -> cell.source
        - cell.prompt_number -> cell.execution_count
        - update outputs
    r   codelanguager   	collapsedinputprompt_numberNheadingmarkdownlevelr   z{hashes} {single_line}# source)hashesZsingle_linehtml)
setdefaultr   r"   r#   	cell_typer   r   r3   execution_countupgrade_outputsoutputsformatjoinget
splitlines)r'   r0   r   r   r   r!   f   s*   


r!   c                 C  s   | j dkr%d| _| dd| _| dd| _| jdd| _t| j| _n1| j d	krV| 	dd}d
|vrV|
drVtd|}|dusEJ | \}}d| _ || _t|| _| dd | dd | S )a  downgrade a cell from v4 to v3

    code cell:
        - set cell.language
        - cell.input <- cell.source
        - cell.prompt_number <- cell.execution_count
        - update outputs
    markdown cell:
        - single-line heading -> heading cell
    r)   pythonr3   r   r8   Nr+   Fr/   
r1   z(#+)\s*(.*)r.   r#   attachments)r7   r*   r   r,   r-   r   r+   downgrade_outputsr:   r=   
startswithrematchgroupsr3   lenr0   )r'   r3   rE   prefixtextr   r   r   downgrade_cell   s$   


rJ   z
text/plainz	text/htmlzimage/svg+xml	image/png
image/jpegz
text/latexapplication/jsonzapplication/javascript)rI   r5   svgZpngZjpeglatexjson
javascriptc                 C  s,   t  D ]\}}|| v r| || |< q| S )z4convert dict with v3 aliases to plain mime-type keys)	_mime_mapitemsr   )daliasmimer   r   r   to_mime_key   s
   rW   c                 C  s.   i }t  D ]\}}|| v r| | ||< q|S )z.convert dict with mime-type keys to v3 aliases)rR   rS   )rT   Zd2rU   rV   r   r   r   from_mime_key   s   rX   c                 C  s
  | d dv ri|  dt  | d dkrd| d< | dd| d< i }t| D ]}|d	v r,q%| |||< q%t| || d
< t| j d|v rNt|d |d< dD ]}||v rft|| t	rf|| 
d||< qP| S | d dkrud| d< | S | d dkr| dd| d< | S )zupgrade a single code cell output from v3 to v4

    - pyout -> execute_result
    - pyerr -> error
    - output.type -> output.data.mime/type
    - mime-type keys
    - stream.stream -> stream.name
    output_type>   display_datapyoutr   r[   execute_resultr-   Nr8   >   rY   r   r8   datarM   )rK   rL   asciipyerrr   streamstdoutr   )r6   r   r   listrW   r   rP   loads
isinstancebytesdecode)outputr]   keyr   r   r   upgrade_output   s4   	
ri   c                 C  s   | d dv r>| d dkrd| d< |  dd| d< |  di }d	|v r+t|d	 |d	< t|}| | t| d
i  | S | d dkrJd| d< | S | d dkrW|  d| d< | S )zdowngrade a single code cell output to v3 from v4

    - pyout <- execute_result
    - pyerr <- error
    - output.data.mime/type -> output.type
    - un-mime-type keys
    - stream.stream <- stream.name
    rY   >   r\   rZ   r\   r[   r8   Nr-   r]   rM   r   r   r_   r`   r   )r   rP   dumpsrX   updater=   )rg   r]   r   r   r   downgrade_output   s"   	
rl   c                 C     dd | D S )z,upgrade outputs of a code cell from v3 to v4c                 S     g | ]}t |qS r   )ri   .0opr   r   r   
<listcomp>      z#upgrade_outputs.<locals>.<listcomp>r   r:   r   r   r   r9        r9   c                 C  rm   )z.downgrade outputs of a code cell to v3 from v4c                 S  rn   r   )rl   ro   r   r   r   rr     rs   z%downgrade_outputs.<locals>.<listcomp>r   rt   r   r   r   rB   	  ru   rB   c                 C  s   | j t kr| S t| t  tj | _ tj| _dd | dD }tj|dg| _| jdd t| tj  | jdt | _	| jdt| _
| S )	zConvert a v4 notebook to v3.

    Parameters
    ----------
    nb : NotebookNode
        The Python representation of the notebook to convert.
    c                 S  rn   r   )rJ   )rp   r'   r   r   r   rr     rs   zdowngrade.<locals>.<listcomp>r   )r   r   r   r   r   )r	   r   r   r
   r   Znew_worksheetr   r   r6   r   r   )r   r   r   r   r   	downgrade  s   

rv   )NN)__doc__
__future__r   rP   rD   Ztraitlets.logr   r	   r   r   Znbformat.corpus.wordsr   r"   Znbformat.notebooknoder   Znbbaser
   r   r(   r!   rJ   rR   rW   rX   ri   rl   r9   rB   rv   r   r   r   r   <module>   s:    

I! 	%