B
    '=[!              	   @   s   d Z ddlZddlZddlmZmZmZ ddlmZ ddl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.    N   )nbformatnbformat_minorNotebookNode)v3)
get_loggerc          
   C   sX   ddl m}m} y|| |d W n2 |k
rR } zt d|| W dd}~X Y nX dS )z(Log validation errors, if there are any.r   )validateValidationError)versionz"Notebook JSON is not valid v%i: %sN)r   r   r	   r   error)nbr
   r   r	   e r   2lib/python3.7/site-packages/nbformat/v4/convert.py_warn_if_invalid   s
    r      c             C   s   |dkrt | | | dd}| dd}|p0d| j_|p<d| j_t| _t| _g  | d< }x4| dg D ]$}x|d D ]}|t| qvW qhW | jdd	 | jd
d	 t | t | S |dkr|tkr|| j_t| _| S t	d| dS )aP  Convert a notebook to 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   orig_nbformatNorig_nbformat_minorr   cells
worksheetsname Z	signature   zZCannot convert a notebook directly from v%s to v4.  Try using the nbformat.convert module.)
r   popmetadatar   r   r   r   appendupgrade_cell
ValueError)r   Zfrom_versionZ
from_minorr   r   r   Zwscellr   r   r   upgrade   s.    

r   c             C   s   |  dt  | jdkrf| dd d| kr<| d| jd< | dd| _| dd| _t| j| _nT| jd	krd
| _| dd}dj	d| d
| dd d| _n| jdkrd
| _| 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)ZhashesZsingle_linehtml)
setdefaultr   	cell_typer   r   r*   execution_countupgrade_outputsoutputsformatjoinget
splitlines)r   r'   r   r   r   r   L   s"    


r   c             C   s   | j dkrJd| _| dd| _| dd| _| jdd| _t| j| _nR| j d	kr| 	dd}d
|kr|
drtd| \}}d| _ || _t|| _| 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    Zpythonr*   r   r.   Nr"   Fr&   
r(   z(#+)\s*(.*)r%   Zattachments)r-   r!   r   r#   r$   r   r"   downgrade_outputsr0   r3   
startswithrematchgroupsr*   lenr'   )r   r*   prefixtextr   r   r   downgrade_cellk   s    


r>   z
text/plainz	text/htmlzimage/svg+xmlz	image/pngz
image/jpegz
text/latexzapplication/jsonzapplication/javascript)r=   r+   ZsvgZpngZjpegZlatexjsonZ
javascriptc             C   s0   x*t  D ]\}}|| kr
| || |< q
W | S )z4convert dict with v3 aliases to plain mime-type keys)	_mime_mapitemsr   )daliasmimer   r   r   to_mime_key   s    rE   c             C   s2   i }x(t  D ]\}}|| kr| | ||< qW |S )z.convert dict with mime-type keys to v3 aliases)r@   rA   )rB   Zd2rC   rD   r   r   r   from_mime_key   s
    rF   c             C   s  | d dkr|  dt  | d dkr>d| d< | dd| d< i }x(t| D ]}|d	krZqL| |||< qLW t| || d
< t| j d|krt|d |d< xjdD ],}||krt|| t	r|| 
d||< qW n4| d dkrd| d< n| 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   rH   execute_resultr$   Nr.   >   r   rG   r.   datazapplication/json)z	image/pngz
image/jpegasciipyerrr   streamstdoutr   )r,   r   r   listrE   r   r?   loads
isinstancebytesdecode)outputrK   keyr   r   r   upgrade_output   s.    	


rW   c             C   s   | d dkrz| d dkr0d| d< |  dd| d< |  di }d	|krVt|d	 |d	< t|}| | t| d
i  n0| d dkrd| d< n| d dkr|  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
    rG   >   rI   rJ   rJ   rH   r.   Nr$   rK   zapplication/jsonr   r   rM   rN   r   )r   r?   dumpsrF   updater3   )rU   rK   r   r   r   downgrade_output   s    	

rZ   c             C   s   dd | D S )z,upgrade outputs of a code cell from v3 to v4c             S   s   g | ]}t |qS r   )rW   ).0opr   r   r   
<listcomp>   s    z#upgrade_outputs.<locals>.<listcomp>r   )r0   r   r   r   r/      s    r/   c             C   s   dd | D S )z.downgrade outputs of a code cell to v3 from v4c             S   s   g | ]}t |qS r   )rZ   )r[   r\   r   r   r   r]      s    z%downgrade_outputs.<locals>.<listcomp>r   )r0   r   r   r   r6      s    r6   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   s   g | ]}t |qS r   )r>   )r[   r   r   r   r   r]      s    zdowngrade.<locals>.<listcomp>r   )r   r   r   r   r   )r   r   r   r   r   Znew_worksheetr   r   r,   r   r   )r   r   r   r   r   	downgrade   s    

r^   )r   r   )__doc__r?   r8   Znbbaser   r   r   r   Ztraitlets.logr   r   r   r   r>   r@   rE   rF   rW   rZ   r/   r6   r^   r   r   r   r   <module>   s0   
3$