o
    ^i%                  	   @  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   N/home/ubuntu/hpml_nyu/venv/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   from_version
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)hashessingle_linehtml)
setdefaultr   r"   r#   	cell_typer   r   r5   execution_countupgrade_outputsoutputsformatjoinget
splitlines)r)   r2   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+   pythonr5   r   r;   Nr-   Fr1   
r3   z(#+)\s*(.*)r0   r#   attachments)r:   r,   r   r.   r/   r   r-   downgrade_outputsr=   r@   
startswithrematchgroupsr5   lenr2   )r)   r5   rH   prefixtextr   r   r   downgrade_cell   s$   


rM   z
text/plainz	text/htmlzimage/svg+xml	image/png
image/jpegz
text/latexapplication/jsonzapplication/javascript)rL   r8   svgpng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
   r\   c                 C  s.   i }t  D ]\}}|| v r| | ||< q|S )z.convert dict with mime-type keys to v3 aliases)rW   rX   )rY   d2rZ   r[   r   r   r   from_mime_key   s   r^   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>   pyoutdisplay_datar   r`   execute_resultr/   Nr;   >   r   r_   r;   datarP   )rN   rO   asciipyerrr   streamstdoutr   )r9   r   r   listr\   r   rU   loads
isinstancebytesdecode)outputrc   keyr   r   r   upgrade_output   s4   	
ro   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
    r_   >   ra   rb   rb   r`   r;   Nr/   rc   rP   r   r   re   rf   r   )r   rU   dumpsr^   updater@   )rm   rc   r   r   r   downgrade_output   s"   	
rr   c                 C     dd | D S )z,upgrade outputs of a code cell from v3 to v4c                 S     g | ]}t |qS r   )ro   .0opr   r   r   
<listcomp>      z#upgrade_outputs.<locals>.<listcomp>r   r=   r   r   r   r<        r<   c                 C  rs   )z.downgrade outputs of a code cell to v3 from v4c                 S  rt   r   )rr   ru   r   r   r   rx     ry   z%downgrade_outputs.<locals>.<listcomp>r   rz   r   r   r   rE   	  r{   rE   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  rt   r   )rM   )rv   r)   r   r   r   rx     ry   zdowngrade.<locals>.<listcomp>r   )r   r   r   r   r   )r	   r   r   r
   r   new_worksheetr   r   r9   r   r   )r   r   r   r   r   	downgrade  s   

r}   )NN)__doc__
__future__r   rU   rG   traitlets.logr   r	   r   r   nbformat.corpus.wordsr   r"   nbformat.notebooknoder   nbbaser
   r   r*   r!   rM   rW   r\   r^   ro   rr   r<   rE   r}   r   r   r   r   <module>   s:    

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