
    e                     (   d Z ddlZddlmZ ddl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j        Zej        Zej        Zej        ZdS )zJRead and write notebooks as regular .py files.

Authors:

* Brian Granger
    N)List   )new_code_cellnew_notebooknew_text_cellnew_worksheet)NotebookReaderNotebookWriterz^#.*coding[:=]\s*([-\w.]+)c                       e Zd ZdZdS )PyReaderErrorz An error raised by the PyReader.N)__name__
__module____qualname____doc__     0lib/python3.11/site-packages/nbformat/v2/nbpy.pyr   r       s        **Dr   r   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )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                 *   |                                 }g }g }d}|D ]}|                    d          st                              |          r3|                    d          r2|                     ||          }||                    |           d}g }z|                    d          r2|                     ||          }||                    |           d}g }|                    d          r3|                     ||          }||                    |           d}g }	|                    |            |r3|dk    r-|                     ||          }||                    |           t          |	          }	t          |	g
          }
|
S )r   codecellz# <nbformat># <codecell>N# <htmlcell>htmlcell# <markdowncell>markdowncell)cells)
worksheets)
splitlines
startswith_encoding_declaration_rematchnew_cellappendr   r   )r   r   r   linesr$   
cell_linesstatelinecellwsnbs              r   r   zPyReader.to_notebook-   s    "
 	( 	(D~.. (2J2P2PQU2V2V (00 (}}UJ77#LL&&&"

00 (}}UJ77#LL&&&"

!344 (}}UJ77#LL&&&&

!!$'''' 	#%:--==
33DT"""'''bT***	r   c                 N   |dk    r>d                     |          }|                    d          }|rt          |          S d	S |dk    r*|                     |          }|rt	          d|          S d	S |dk    r(|                     |          }|rt	          d|          S d	S d	S )
zCreate a new cell.r   
)inputr!   html)sourcer#   markdownN)joinstripr   _remove_commentsr   )r   r.   r,   input_texts        r   r*   zPyReader.new_cellR   s    JYYu%%F\\$''F 3$622223 3j  ((//D :$VD9999: :n$$((//D >$Z==== %$> >r   c                     g }|D ]J}|                     d          r|                    |dd                     5|                    |           Kd                    |          }|                    d          }|S )N#   r4   )r'   r+   r9   r:   )r   r,   	new_linesr/   r=   s        r   r;   zPyReader._remove_commentsb   s    	 	' 	'Ds## '  abb****  &&&&yy##zz$r   c              #     K   t          |          dk    r|d         V  t                      ddl}d                    |          }|                    |          }d |j        D             }t          t          |          dz
            D ]C}d                    |||         ||dz                                                   d          V  Dd                    ||d         d                                       d          V  dS )zSplit lines into code blocks.r   r   Nr4   c                 "    g | ]}|j         d z
  S )r   )lineno).0xs     r   
<listcomp>z4PyReader.split_lines_into_blocks.<locals>.<listcomp>v   s    2221!(Q,222r   )lenStopIterationastr9   parsebodyranger:   )r   r,   rK   r7   codestartsis          r   split_lines_into_blocksz PyReader.split_lines_into_blocksm   s     u::??(NNN//!


5!!yy  22	222s6{{Q'' 	J 	JA))E&)fQUm";<==CCDIIIIIIiifRjll+,,2248888888r   N)	r   r   r   r   r   r   r*   r;   rR   r   r   r   r   r   &   sf        ##- - -# # #J> > > 	 	 	9 9 9 9 9r   r   c                       e Zd ZdZd ZdS )PyWriterzA Python notebook writer.c                    dg}|                     ddg           |j        D ]}|j        D ]x}|j        dk    rk|                    d          }|S|                     ddg           |                     |                                           |                    d           y|j        dk    ru|                    d	          }|]|                     d
dg           |                     d |                                D                        |                    d           |j        dk    rt|                    d	          }|]|                     ddg           |                     d |                                D                        |                    d           z|                    d           t          d                    |                    S )z&Convert a notebook object to a string.z# -*- coding: utf-8 -*-z# <nbformat>2</nbformat> rO   r5   Nr   r6   r7   r    c                     g | ]}d |z   S z# r   rE   r/   s     r   rG   z#PyWriter.writes.<locals>.<listcomp>       %R%R%RddTk%R%R%Rr   r8   r"   c                     g | ]}d |z   S rX   r   rY   s     r   rG   z#PyWriter.writes.<locals>.<listcomp>   rZ   r   r4   )	extendr%   r$   	cell_typegetr&   r+   strr9   )r   r2   r   r,   r1   r0   r<   s          r   writeszPyWriter.writes   s   *+0"5666- 	) 	)B ) )>V++!XXg..F)nb%9:::V%6%6%8%8999R(((^v--!XXh//F)nb%9:::%R%Rf>O>O>Q>Q%R%R%RSSSR(((^z11!XXh//F)&8"%=>>>%R%Rf>O>O>Q>Q%R%R%RSSSR(((%)& 	R499U##$$$r   N)r   r   r   r   r`   r   r   r   rT   rT   |   s)        ##% % % % %r   rT   )r   retypingr   nbbaser   r   r   r   rwbaser	   r
   compiler(   	Exceptionr   r   rT   _reader_writerr   readr   writer`   r   r   r   <module>rk      sD   $ 
			       M M M M M M M M M M M M 2 2 2 2 2 2 2 2 &2:&CDD 	 	 	 	 	I 	 	 	S9 S9 S9 S9 S9~ S9 S9 S9l% % % % %~ % % %> (**
(**|!	r   