
    f%              	          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
 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.    )annotationsN)
get_logger)v3	validator)generate_corpus_id)NotebookNode   )nbformatnbformat_minorc                    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        N/var/www/cvtools/html/venv/lib/python3.12/site-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   random_cell_idid
ValueError)	r   from_version
from_minormsgr   r   r   wscells	            r   upgrader,      s    *~2%q ]//44J,-Jq\* 5 ff%:DA$1$6Q!*=*B' * ! 7e &&r* 	1B7 1\$/01	1
 	#
R(X&	q'I > +(*+ +5'*	
	13?	@     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!   r9   execution_countupgrade_outputsoutputsformatjoinget
splitlines)r+   r6   s     r   r#   r#   f   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/   pythonr9   r   r?   Nr1   Fr5   
r7   z(#+)\s*(.*)r4   r%   attachments)r>   r0   r    r2   r3   r!   r1   downgrade_outputsrA   rD   
startswithrematchgroupsr9   lenr6   )r+   r9   rM   prefixtexts        r   downgrade_cellrR      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)rQ   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_keyrb      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`   ra   s       r   from_mime_keyre      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!   rh   execute_resultr3   Nr?   >   r!   rg   r?   datarU   )rS   rT   asciipyerrr   streamstdoutr   )r=   r   r    listrb   r!   rZ   loads
isinstancebytesdecode)outputrk   keys      r   upgrade_outputrw      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
    rg   >   ri   rj   rj   rh   r?   Nr3   rk   rU   r!   r   rm   rn   r   )r    rZ   dumpsre   updaterD   )ru   rk   s     r   downgrade_outputr{      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)rw   rA   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)r{   r}   s     r   rJ   rJ   	  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    rR   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__
__future__r   rZ   rL   traitlets.logr   r
   r   r   nbformat.corpus.wordsr   r$   nbformat.notebooknoder   nbbaser   r   r,   r#   rR   r]   rb   re   rw   r{   r@   rJ   r    r-   r   <module>r      s    3 #  	 $ " F . ,MFRB@ *		"J82
4
r-   