
    f                    J   d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
mZ ddlmZmZ  ej                  d      Z G d d	e      Z G d
 de      Z G d de      Z e       Z e       Zej.                  Zej0                  Zej2                  Zej4                  Zej6                  Zy)zJRead and write notebooks as regular .py files.

Authors:

* Brian Granger
    )annotationsN   )nbformatnbformat_minornew_code_cellnew_heading_cellnew_notebooknew_text_cellnew_worksheet)NotebookReaderNotebookWriterz^#.*coding[:=]\s*([-\w.]+)c                      e Zd ZdZy)PyReaderErrorz%An error raised for a pyreader error.N)__name__
__module____qualname____doc__     K/var/www/cvtools/html/venv/lib/python3.12/site-packages/nbformat/v3/nbpy.pyr   r   (   s    /r   r   c                  .    e Zd ZdZd Zd Zd Zd Zd Zy)PyReaderzA python notebook reader.c                (     | j                   |fi |S )Convert a string to a notebook)to_notebook)selfskwargss      r   readszPyReader.reads/   s    t,V,,r   c                2   |j                         }g }g }i }d}|D ]  }|j                  d      st        j                  |      r+|j                  d      r. | j                  ||fi |}||j                  |       d}g }i }j|j                  d      r. | j                  ||fi |}||j                  |       d}g }i }|j                  d      r. | j                  ||fi |}||j                  |       d}g }i }|j                  d      r/ | j                  ||fi |}||j                  |       d	}g }i }(|j                  d
      rl | j                  ||fi |}||j                  |       g }t        j                  d|      }	|	#d}i }t        |	j                  d            |d<   d}i }g }|j                  |        |r*|dk(  r%| j	                  ||      }||j                  |       t        |      }
t        |
g      S )r   codecellz# <nbformat># <codecell># <htmlcell>htmlcell# <markdowncell>markdowncell)# <rawcell>z# <plaintextcell>rawcellz# <headingcellz## <headingcell level=(?P<level>\d)>headingcelllevel)cells)
worksheets)
splitlines
startswith_encoding_declaration_rematchnew_cellappendreintgroupr   r	   )r   r   r   linesr+   
cell_linesstatelinecellmwss              r   r   zPyReader.to_notebook3   s6    "
 /	(D~.2J2P2PQU2V0$t}}UJA&A#LL&"
0$t}}UJA&A#LL&"
!34$t}}UJA&A#LL&&
!EF$t}}UJA&A#LL&!
!12$t}}UJA&A#LL&!#JHHCTJ=)EF&)!'''*:&;F7O&EF!#J!!$'_/	(` %:-==
3DT"'t,,r   c                   |dk(  r1dj                  |      }|j                  d      }|rt        |      S y|dk(  r!| j                  |      }|rt	        d|      S y|dk(  r!| j                  |      }|rt	        d|      S y|d	k(  r!| j                  |      }|rt	        d
|      S y|dk(  r3| j                  |      }|j                  dd      }|rt        ||      S yy)zCreate a new cell.r!   
)inputr$   html)sourcer&   markdownr(   rawr)   r*   r   )rA   r*   N)joinstripr   _remove_commentsr
   getr   )r   r8   r6   r   input_textr*   s          r   r1   zPyReader.new_cellq   s   JYYu%F\\$'F$622 j ((/D$VD99 n$((/D$Z== i((/D$U488 m#((/DJJw*E't5AA  $r   c                    g }|D ]9  }|j                  d      r|j                  |dd         )|j                  |       ; dj                  |      }|j                  d      }|S )N#   r>   )r.   r2   rD   rE   )r   r6   	new_linesr9   rI   s        r   rF   zPyReader._remove_comments   sg    	 	'Ds#  ab*  &		'
 yy#zz$r   c              #    K   t        |      dk(  r|d    t               ddl}dj                  |      }|j	                  |      }|j
                  D cg c]  }|j                  dz
   }}t        t        |      dz
        D ]0  }dj                  |||   ||dz             j                  d       2 dj                  ||d   d       j                  d       yc c}w w)zSplit lines into code blocks.r   r   Nr>   )	lenStopIterationastrD   parsebodylinenorangerE   )r   r6   rR   rA   codexstartsis           r   split_lines_into_blocksz PyReader.split_lines_into_blocks   s     u:?(N/!5!yy (,		21!((Q,22s6{Q' 	JA))E&)fQUm<=CCDII	JiifRjl+,22488 3s   AC&C!,A:C&N)	r   r   r   r   r   r   r1   rF   r[   r   r   r   r   r   ,   s     #-<-|B2	9r   r   c                      e Zd ZdZd Zy)PyWriterzA Python notebook writer.c           	        dg}|j                  dt        t        fz  dg       |j                  D ]x  }|j                  D ]e  }|j
                  dk(  rX|j                  d      }|'|j                  ddg       |j                  |j                                |j                  d       k|j
                  dk(  ri|j                  d      }||j                  d	dg       |j                  |j                         D cg c]  }d
|z   	 c}       |j                  d       |j
                  dk(  rk|j                  d      }||j                  ddg       |j                  |j                         D cg c]  }d
|z   	 c}       |j                  d       ]|j
                  dk(  rk|j                  d      }||j                  ddg       |j                  |j                         D cg c]  }d
|z   	 c}       |j                  d       |j
                  dk(  s|j                  d      }|j                  dd      }||j                  d|z  dg       |j                  |j                         D cg c]  }d
|z   	 c}       |j                  d       h { |j                  d       dj                  |      S c c}w c c}w c c}w c c}w )zConvert a notebook to a string.z# -*- coding: utf-8 -*-z# <nbformat>%i.%i</nbformat> rW   r?   r"   r@   rA   r#   z# rB   r%   rC   r'   headingr*   r   z# <headingcell level=%s>r>   )
extendr   r   r,   r+   	cell_typerG   r-   r2   rD   )	r   nbr   r6   r<   r:   rH   r9   r*   s	            r   writeszPyWriter.writes   sv   *+.(N1KK	
 --  	)B )>>V+!XXg.F)nb%9:V%6%6%89R(^^v-!XXh/F)nb%9:f>O>O>Q%RddTk%RSR(^^z1!XXh/F)&8"%=>f>O>O>Q%RddTk%RSR(^^u,!XXh/F)mR%89f>O>O>Q%RddTk%RSR(^^y0!XXh/F HHWa0E)&@5&H"%MNf>O>O>Q%RddTk%RSR(?) 	)B 	Ryy- &S &S &S &Ss   >K7K1KKN)r   r   r   r   rd   r   r   r   r]   r]      s
    #+ r   r]   )r   
__future__r   r3   nbbaser   r   r   r   r	   r
   r   rwbaser   r   compiler/   	Exceptionr   r   r]   _reader_writerr   readr   writerd   r   r   r   <module>rn      s   " # 	   3 &2::&CD 0I 0u9~ u9p. ~ . b *
*||!!	r   