
    e$              	           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dS )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} 	  || |           dS # |$ r.}t                                          d||           Y d}~dS 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        3lib/python3.11/site-packages/nbformat/v4/convert.py_warn_if_invalidr      s    22222222MW%%%%%% M M M?!LLLLLLLLLMs    A#AAc                 V   |s| d         }|s+d| vr|dk    rd}t          j        |          d}n| d         }|dk    r
t          | |           |                     dd          }|                     d	d          }|pd| j        _        |pd| j        _        t          | _        t          | _        g x| d
<   }|                     dg           D ]/}|d
         D ]$}|	                    t          |                     %0| j                            dd           | j                            dd           t          | t                     | S |dk    rJ|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4

,-Jq\*** 55 ff%:DAA$1$6Q!*=*B' * ! 7e &&r** 	1 	1B7 1 1\$//00001 	###
R(((X&&&				''I >> + +(***4'*	57CD
 
 	
    c           	         |                      dt                                 t                      | _        | j        dk    r|                     dd           d| v r|                     d          | j        d<   |                     dd          | _        |                     dd          | _        t          | j
                  | _
        n| j        d	k    rvd
| _        |                     dd          }d                    d|z  d                    |                     dd                                                              | _        n| 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   $)-+)>)>DM+&hhw++#xx>>&t|44	9	$	$#!$$.55;(B!7!7!B!B!D!DEE 6 
 
 
6	!	!#Kr+   c                 z   | j         dk    rwd| _        |                     dd          | _        |                     dd          | _        | j                            dd          | _        t          | j                  | _        n| j         d	k    r| 	                    dd          }d
|vrg|
                    d          rRt          j        d|          }|J |                                \  }}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-   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6	:	%	%(B''v&"3"3C"8"8H^V4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                 |    t                                           D ]!\  }}|| v r|                     |          | |<   "| S )z4convert dict with v3 aliases to plain mime-type keys)	_mime_mapitemsr   )daliasmimes      r   to_mime_keyr`      sA     (( # #tA::eeEllAdGHr+   c                 f    i }t                                           D ]\  }}|| v r| |         ||<   |S )z.convert dict with mime-type keys to v3 aliases)r[   r\   )r]   d2r^   r_   s       r   from_mime_keyrc      s@    	B ((    t199$BuIIr+   c                    | d         dv r	|                      dt                                 | d         dk    rd| d<   |                     dd          | d<   i }t          |           D ]}|d	v r|                     |          ||<    t	          |           || d
<   t	          | j                   d|v rt          j        |d                   |d<   dD ]?}||v r9t          ||         t                    r||         
                    d          ||<   @n7| d         dk    rd| 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    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      s    m 999*lnn555- G++$4F=!(.

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

3DIIDvFO$$$%%'+z$7I2J'K'KD#$. 	6 	6Cd{{z$s)U;;{ I,,W55S		6 
	'	)	) '}		(	*	*Hh77vMr+   c                    | d         dv r| d         dk    rd| d<   |                      dd          | d<   |                      di           }d	|v rt          j        |d	                   |d	<   t          |          }|                     |           t          |                     d
i                      n6| d         dk    rd| 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
    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B- $444$+F=!&,jj1BD&I&IF?# zz&"%%%%'+z$7I2J'K'KD#$T""dfjjR001111		'	)	) '}		(	*	*!::f--xMr+   c                     d | D             S )z,upgrade outputs of a code cell from v3 to v4c                 ,    g | ]}t          |          S  )ru   .0ops     r   
<listcomp>z#upgrade_outputs.<locals>.<listcomp>  s     1112N2111r+   r|   r?   s    r   r>   r>     s    111111r+   c                     d | D             S )z.downgrade outputs of a code cell to v3 from v4c                 ,    g | ]}t          |          S r|   )ry   r}   s     r   r   z%downgrade_outputs.<locals>.<listcomp>
  s!    333RR  333r+   r|   r   s    r   rH   rH     s    3373333r+   c                 
   | j         t           k    r| S t          | t                      t          j         | _         t          j        | _        d |                     d          D             }t          j        |          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                 ,    g | ]}t          |          S r|   )rP   )r~   r)   s     r   r   zdowngrade.<locals>.<listcomp>  s     >>>d^D!!>>>r+   r   )r   r   r   r   r   )r   r   r   r	   r   new_worksheetr   r    r;   r   r   )r   r   s     r   	downgrader     s     
{h	 R"""+BK)B>>bffWoo>>>E%E2223BMK62&&& R%%%{AAB[__-BNSSBIr+   )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+   r   <module>r      sR   3 3
  				 $ $ $ $ $ $ " " " " " " " " J J J J J J J J J J J JM M MH
 H
 H
 H
V  B  @ *	 		    " " "J  82 2 2
4 4 4
    r+   