
    ^h%              	          S r SSKJr  SSKrSSKrSSKJr  SSKJrJ	r	  SSK
Jr  SSKJr  SS	KJrJr  S
 rSS jrS rS rSSSSSSSSS.rS rS rS rS rS rS rS rg)z-Code for converting notebooks to and from v3.    )annotationsN)
get_logger)v3	validator)generate_corpus_id)NotebookNode   )nbformatnbformat_minorc                |    SSK JnJn   U" XS9  g! U a$  n[        5       R	                  SX5         SnAgSnAff = f)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        M/home/james-whalen/.local/lib/python3.13/site-packages/nbformat/v4/convert.py_warn_if_invalidr      s;    2M% M?LLMs    ;6;c                j   U(       d  U S   nU(       d,  SU ;  a!  US:X  a  Sn[         R                  " U5      eSnOU S   nUS:X  Ga	  [        X5        U R                  SS5      nU R                  S	S5      nU=(       d    SU R                  l        U=(       d    SU R                  l        [        U l        [        U l        / =U S
'   nU R                  S/ 5       H)  nUS
    H  nUR                  [        U5      5        M     M+     U R                  R                  SS5        U R                  R                  SS5        [        U [        5        U $ US:X  aQ  U[        :X  a  U $ US:  a"  U R                   H  n[        5       Ul        M     X R                  l        [        U l        U $ [        SU-  5      e)a3  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*B7\$/0 $ +
 	#
R(X&	q'I >(* ! +5'*	
	13?	@     c           	        U R                  S[        5       5        [        5       U l        U R                  S:X  a  U R                  SS5        SU ;   a  U R                  S5      U R                  S'   U R                  SS5      U l        U R                  SS5      U l        [        U R                  5      U l
        U $ U R                  S	:X  a`  S
U l        U R                  SS5      nSR                  SU-  SR                  U R                  SS5      R                  5       5      S9U l        U $ U R                  S:X  a  S
U l        U $ )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                b   U R                   S:X  aq  SU l        U R                  SS5      U l        U R                  SS5      U l        U R
                  R                  SS5      U l        [        U R                  5      U l        OU R                   S	:X  ay  U R                  SS5      nS
U;  aa  UR                  S5      (       aK  [        R                  " SU5      nUc   eUR                  5       u  p4SU l         X@l        [        U5      U l        U R                  SS5        U R                  SS5        U $ )zdowngrade 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"8HH^V4E$$$ <<>LF&DNK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                t    [         R                  5        H  u  pX;   d  M  U R                  U5      X'   M!     U $ )z4convert dict with v3 aliases to plain mime-type keys)	_mime_mapitemsr    )daliasmimes      r   to_mime_keyrb      s0     (:eeElAG ) Hr-   c                ^    0 n[         R                  5        H  u  p#X0;   d  M  X   X'   M     U$ )z.convert dict with mime-type keys to v3 aliases)r]   r^   )r_   d2r`   ra   s       r   from_mime_keyre      s/    	B (9BI ) Ir-   c                X   U S   S;   a  U R                  S[        5       5        U S   S:X  a  SU S'   U R                  SS5      U S'   0 n[        U 5       H  nUS	;   a  M  U R                  U5      X'   M      [	        U5        XS
'   [	        U R
                  5        SU;   a  [        R                  " US   5      US'   S H8  nX!;   d  M
  [        X   [        5      (       d  M#  X   R                  S5      X'   M:     U $ U S   S:X  a  SU S'   U $ U S   S:X  a  U R                  SS5      U S'   U $ )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      s@    m 99*ln5- G+$4F=!(.

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

3DI   	DvFOO$%'+zz$7I2J'KD#$.C{z$)U;; I,,W5	 / M	 
	'	) '} M 
	(	*Hh7vMr-   c                   U S   S;   a  U S   S:X  a  SU S'   U R                  SS5      U S'   U R                  S0 5      nS	U;   a  [        R                  " US	   5      US	'   [        U5      nU R	                  U5        [        U R                  S
0 5      5        U $ U S   S:X  a  SU S'   U $ U S   S:X  a  U R                  S5      U S'   U $ )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    U  Vs/ s H  n[        U5      PM     sn$ s  snf )z,upgrade outputs of a code cell from v3 to v4)rw   rA   ops     r   r@   r@     s    )012N2111   c                D    U  Vs/ s H  n[        U5      PM     sn$ s  snf )z.downgrade outputs of a code cell to v3 from v4)r{   r}   s     r   rJ   rJ   	  s     +237RR 7333r   c                8   U R                   [         :w  a  U $ [        U [         5        [        R                   U l         [        R                  U l        U R	                  S5       Vs/ s H  n[        U5      PM     nn[        R                  " US9/U l        U R                  R                  SS5        [        U [        R                   5        U R                  R	                  S[         5      U l
        U R                  R	                  S[        5      U l        U $ s  snf )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>od^D!oE>%%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-   