o
    i$                  	   @   s   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZ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.    N)
get_logger)v3   )	validator   )NotebookNodenbformatnbformat_minorrandom_cell_idc              
   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/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/nbformat/v4/convert.py_warn_if_invalid   s   r   c                 C   s8  |s| d }|sd| vr|dkrt dd}n| d }|dkrut| | | dd}| d	d}|p4d| j_|p:d| j_t| _t| _g  | d
< }| dg D ]}|d
 D ]	}|	t
| qUqO| 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   r
   id
ValueError)r   from_version
from_minorr   r   r   wscellr   r   r   upgrade   sR   



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   r3   execution_countupgrade_outputsoutputsformatjoinget
splitlines)r'   r0   r   r   r   r!   g   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   r9   Nr+   Fr/   
r1   z(#+)\s*(.*)r.   r"   attachments)r8   r*   r   r,   r-   r   r+   downgrade_outputsr;   r>   
startswithrematchgroupsr3   lenr0   )r'   r3   rF   prefixtextr   r   r   downgrade_cell   s$   


rK   z
text/plainz	text/htmlzimage/svg+xml	image/png
image/jpegz
text/latexapplication/jsonzapplication/javascript)rJ   r6   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
   rZ   c                 C   s.   i }t  D ]\}}|| v r| | ||< q|S )z.convert dict with mime-type keys to v3 aliases)rU   rV   )rW   d2rX   rY   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-   Nr9   >   r   r]   r9   datarN   )rL   rM   asciipyerrr   streamstdoutr   )r7   r   r   listrZ   r   rS   loads
isinstancebytesdecode)outputra   keyr   r   r   upgrade_output   s4   	
rm   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]   >   r_   r`   r`   r^   r9   Nr-   ra   rN   r   r   rc   rd   r   )r   rS   dumpsr\   updater>   )rk   ra   r   r   r   downgrade_output   s"   	
rp   c                 C      dd | D S )z,upgrade outputs of a code cell from v3 to v4c                 S      g | ]}t |qS r   )rm   .0opr   r   r   
<listcomp>      z#upgrade_outputs.<locals>.<listcomp>r   r;   r   r   r   r:        r:   c                 C   rq   )z.downgrade outputs of a code cell to v3 from v4c                 S   rr   r   )rp   rs   r   r   r   rv     rw   z%downgrade_outputs.<locals>.<listcomp>r   rx   r   r   r   rC   
  ry   rC   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   rr   r   )rK   )rt   r'   r   r   r   rv     rw   zdowngrade.<locals>.<listcomp>r   )r   r   r   r   r   )r   r   r   r	   r   new_worksheetr   r   r7   r   r   )r   r   r   r   r   	downgrade  s   

r{   )NN)__doc__rS   rE   traitlets.logr   r   r   r   r   nbbaser   r	   r
   r   r(   r!   rK   rU   rZ   r\   rm   rp   r:   rC   r{   r   r   r   r   <module>   s6    

L! 	%