
    e<                     4   d Z ddlZddlm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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   )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dS )PyReaderErrorz%An error raised for a pyreader error.N)__name__
__module____qualname____doc__     0lib/python3.11/site-packages/nbformat/v3/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.reads1   s    t,,V,,,r   c                    |                                 }g }g }i }d}|D ]}|                    d          st                              |          r3|                    d          r- | j        ||fi |}||                    |           d}g }i }u|                    d          r- | j        ||fi |}||                    |           d}g }i }|                    d          r- | j        ||fi |}||                    |           d}g }i }|                    d	          s|                    d
          r. | j        ||fi |}||                    |           d}g }i }Q|                    d          rr | j        ||fi |}||                    |           g }t          j        d|          }	|	+d}i }t          |	                    d                    |d<   d}i }g }|                    |           |r3|dk    r-|                     ||          }||                    |           t          |          }
t          |
g          }|S )r   codecellz# <nbformat># <codecell>N# <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wsnbs               r   r   zPyReader.to_notebook5   s    "
 /	( /	(D~.. .(2J2P2PQU2V2V .(00 ,($t}UJAA&AA#LL&&&"
00 %($t}UJAA&AA#LL&&&"
!344 ($t}UJAA&AA#LL&&&&
// (4??CV3W3W ($t}UJAA&AA#LL&&&!
!122 ($t}UJAA&AA#LL&&&!#JHCTJJ=)EF&)!'''*:*:&;&;F7OO&EF!#JJ!!$'''' 	#%:--==
33DT"""'''bT***	r   c                 :   |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	k    r*|                     |          }|rt	          d
|          S dS |dk    r>|                     |          }|                    dd          }|rt          ||          S dS dS )zCreate a new cell.r!   
)inputr$   html)sourcer&   markdownr(   rawr)   r*   r   )rB   r*   N)joinstripr   _remove_commentsr
   getr   )r   r8   r6   r   input_textr*   s          r   r1   zPyReader.new_cellt   s|   JYYu%%F\\$''F 3$622223 3j  ((//D :$VD9999: :n$$((//D >$Z====> >i((//D 9$U488889 9m##((//DJJw**E B't5AAAA	 $#B Br   c                     g }|D ]J}|                     d          r|                    |dd                     5|                    |           Kd                    |          }|                    d          }|S )N#   r?   )r.   r2   rE   rF   )r   r6   	new_linesr9   rJ   s        r   rG   zPyReader._remove_comments   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   Nr?   c                 "    g | ]}|j         d z
  S )r   )lineno).0xs     r   
<listcomp>z4PyReader.split_lines_into_blocks.<locals>.<listcomp>   s    2221!(Q,222r   )lenStopIterationastrE   parsebodyrangerF   )r   r6   rX   rB   codestartsis          r   split_lines_into_blocksz PyReader.split_lines_into_blocks   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   r1   rG   r_   r   r   r   r   r   .   si        ##- - -= = =~B B B2	 	 	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t          t          fz  dg           |j        D ]}|j        D ]}|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    rv|                    d	          }|]|                     ddg           |                     d |                                D                        |                    d           z|j        dk    rv|                    d	          }|]|                     ddg           |                     d |                                D                        |                    d           |j        dk    r|                    d	          }|                    dd          }|`|                     d|z  dg           |                     d |                                D                        |                    d           |                    d           d	                    |          S )zConvert a notebook to a string.z# -*- coding: utf-8 -*-z# <nbformat>%i.%i</nbformat> r\   r@   Nr"   rA   rB   r#   c                     g | ]}d |z   S z# r   rR   r9   s     r   rT   z#PyWriter.writes.<locals>.<listcomp>       %R%R%RddTk%R%R%Rr   rC   r%   c                     g | ]}d |z   S re   r   rf   s     r   rT   z#PyWriter.writes.<locals>.<listcomp>   rg   r   rD   r'   c                     g | ]}d |z   S re   r   rf   s     r   rT   z#PyWriter.writes.<locals>.<listcomp>   rg   r   headingr*   r   z# <headingcell level=%s>c                     g | ]}d |z   S re   r   rf   s     r   rT   z#PyWriter.writes.<locals>.<listcomp>   rg   r   r?   )
extendr   r   r,   r+   	cell_typerH   r-   r2   rE   )r   r=   r   r6   r<   r:   rI   r*   s           r   writeszPyWriter.writes   s   *+.(N1KK	
 	
 	
 -  	)  	)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(((^u,,!XXh//F)mR%8999%R%Rf>O>O>Q>Q%R%R%RSSSR(((^y00!XXh//F HHWa00E)&@5&H"%MNNN%R%Rf>O>O>Q>Q%R%R%RSSSR(((?)@ 	Ryyr   N)r   r   r   r   rn   r   r   r   ra   ra      s)        ##+  +  +  +  + r   ra   )r   r3   typingr   nbbaser   r   r   r   r	   r
   r   rwbaser   r   compiler/   	Exceptionr   r   ra   _reader_writerr   readr   writern   r   r   r   <module>rx      s}   $ 
			                        3 2 2 2 2 2 2 2 &2:&CDD 	 	 	 	 	I 	 	 	v9 v9 v9 v9 v9~ v9 v9 v9r.  .  .  .  . ~ .  .  . b (**
(**|!	r   