
    Ud$              	           d 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	mZm
Z
mZ d ZddZd	 Zd
 ZdddddddddZd Zd Zd Zd Zd Zd Zd Zy)z-Code for converting notebooks to and from v3.    N)
get_logger)v3	validator   )NotebookNodenbformatnbformat_minorrandom_cell_idc                     ddl m}m} 	  || |       y# |$ r%}t               j	                  d||       Y d}~yd}~ww xY 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   es        5/usr/lib/python3/dist-packages/nbformat/v4/convert.py_warn_if_invalidr      s?    2MW% M?!LLMs   
 ?:?c                 (   |s| d   }|s(d| vr|dk(  rd}t        j                  |      d}n| d   }|dk(  rt        | |       | j                  dd      }| j                  d	d      }|xs d| j                  _        |xs d| j                  _        t        | _        t        | _        g x| d
<   }| j                  dg       D ]&  }|d
   D ]  }|j                  t        |              ( | j                  j                  dd       | j                  j                  dd       t        | t               | S |dk(  rN|t        k(  r| S |dk  r | j                  D ]  }t               |_         || j                  _        t        | _        | S t        d|z        )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_minormsgr   r   r   wscells	            r   upgrader*      s    *~2%q ]//44
,-Jq\* 5 ff%:DA$1$6Q!*=*B' * ! 7e &&r* 	1B7 1\$/01	1
 	#
R(X&			'I > +(*+ +5'*	57CD
 	
    c           	         | j                  dt                      t               | _        | j                  dk(  r~| j                  dd       d| v r| j                  d      | j                  d<   | j                  dd      | _        | j                  dd      | _        t        | j                        | _
        | S | j                  d	k(  rcd
| _        | j                  dd      }dj                  d|z  dj                  | j                  dd      j                                     | _        | S | j                  dk(  rd
| _        | 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    r7   execution_countupgrade_outputsoutputsformatjoinget
splitlines)r)   r4   s     r   r"   r"   e   s    	OOJ/DG~~R $)-+)>DMM+&hhw+#xx>&t||4 K 
9	$#!$.55;(B!7!B!B!DE 6 
 K 
6	!#Kr+   c                 P   | j                   dk(  rqd| _        | j                  dd      | _        | j                  dd      | _        | j
                  j                  dd      | _        t        | j                        | _        n| j                   d	k(  rr| j                  dd      }d
|vr\|j                  d      rKt        j                  d|      }|J |j                         \  }}d| _         || _        t        |      | _        | j                  dd       | j                  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-   pythonr7   r   r=   Nr/   Fr3   
r5   z(#+)\s*(.*)r2   r#   attachments)r<   r.   r   r0   r1   r    r/   downgrade_outputsr?   rB   
startswithrematchgroupsr7   lenr4   )r)   r7   rK   prefixtexts        r   downgrade_cellrP      s     ~~ XXh+
!XX&7>**;>(6	:	%(B'v&"3"3C"8HH^V4E$$$ <<>LFD&DNDKVDJHHT4HH]D!Kr+   z
text/plainz	text/htmlzimage/svg+xml	image/png
image/jpegz
text/latexapplication/jsonzapplication/javascript)rO   r:   svgpngjpeglatexjson
javascriptc                 p    t         j                         D ]  \  }}|| v s| j                  |      | |<     | S )z4convert dict with v3 aliases to plain mime-type keys)	_mime_mapitemsr   )daliasmimes      r   to_mime_keyr`      s;     ( #tA:eeElAdG# Hr+   c                 \    i }t         j                         D ]  \  }}|| v s| |   ||<    |S )z.convert dict with mime-type keys to v3 aliases)r[   r\   )r]   d2r^   r_   s       r   from_mime_keyrc      s<    	B (  t19$BuI  Ir+   c                 4   | d   dv r| j                  dt                      | d   dk(  rd| d<   | j                  dd      | d<   i }t        |       D ]  }|d	v r| j                  |      ||<    t	        |       || d
<   t	        | j
                         d|v rt        j                  |d         |d<   dD ]2  }||v st        ||   t              s||   j                  d      ||<   4 | S | d   dk(  rd| d<   | S | d   dk(  r| j                  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    rf   execute_resultr1   Nr=   >   r    re   r=   datarS   )rQ   rR   asciipyerrr   streamstdoutr   )r;   r   r   listr`   r    rX   loads
isinstancebytesdecode)outputri   keys      r   upgrade_outputru      sS    m 99*ln5- G+$4F=!(.

?D(IF$% < 	(CDD

3DI	( 	DvFOO$%'+zz$7I2J'KD#$. 	6Cd{z$s)U; I,,W5S		6 M	 
	'	) '} M 
	(	*Hh7vMr+   c                    | d   dv r| d   dk(  rd| d<   | j                  dd      | d<   | j                  di       }d	|v rt        j                  |d	         |d	<   t        |      }| j	                  |       t        | j                  d
i              | S | d   dk(  rd| d<   | S | d   dk(  r| j                  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
    re   >   rg   rh   rh   rf   r=   Nr1   ri   rS   r    r   rk   rl   r   )r   rX   dumpsrc   updaterB   )rs   ri   s     r   downgrade_outputry      s     m BB- $44$+F=!&,jj1BD&IF?# zz&"%%'+zz$7I2J'KD#$T"dfjjR01
 M	 
	'	) '} M 
	(	*!::f-xMr+   c                 >    | D cg c]  }t        |       c}S c c}w )z,upgrade outputs of a code cell from v3 to v4)ru   r?   ops     r   r>   r>     s    )012N2111   c                 >    | D cg c]  }t        |       c}S c c}w )z.downgrade outputs of a code cell to v3 from v4)ry   r{   s     r   rH   rH     s    +23RR 333r}   c                 4   | j                   t         k7  r| S t        | t                t        j                   | _         t        j                  | _        | j	                  d      D cg c]  }t        |       }}t        j                  |      g| _        | j                  j                  dd       t        | t        j                          | j                  j	                  dt               | _
        | j                  j	                  dt              | _        | S c c}w )zConvert a v4 notebook to v3.

    Parameters
    ----------
    nb : NotebookNode
        The Python representation of the notebook to convert.
    r   )r   r   r   r   r   )r   r   r   r	   r   rP   new_worksheetr   r    r;   r   r   )r   r)   r   s      r   	downgrader     s     
{{h	 R"++BK))B.0ffWo>d^D!>E>%%E23BMKK62& R%{{AB[[__-BNSBI ?s   #D)NN)__doc__rX   rJ   traitlets.logr   r   r   r   nbbaser   r	   r
   r   r*   r"   rP   r[   r`   rc   ru   ry   r>   rH   r    r+   r   <module>r      sz    3
  	 $ " J JMH
VB@ *		"J82
4
r+   