
    Mh                    (   d Z ddlmZ ddl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
    )annotationsN   )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__     P/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/nbformat/v2/nbpy.pyr   r       s        ****r   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wss
             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"""'''t,,,,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_cellO   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#   r3   )r'   r+   r8   r9   )r   r,   	new_linesr/   r<   s        r   r:   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   Nr3   c                "    g | ]}|j         d z
  S )r   )lineno).0xs     r   
<listcomp>z4PyReader.split_lines_into_blocks.<locals>.<listcomp>s   s    2221!(Q,222r   )lenStopIterationastr8   parsebodyranger9   )r   r,   rJ   r6   codestartsis          r   split_lines_into_blocksz PyReader.split_lines_into_blocksj   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:   rQ   r   r   r   r   r   $   sf        ##- - -"- "- "-H> > > 	 	 	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> rN   r4   Nr   r5   r6   r    c                    g | ]}d |z   S z# r   rD   r/   s     r   rF   z#PyWriter.writes.<locals>.<listcomp>       %R%R%RddTk%R%R%Rr   r7   r"   c                    g | ]}d |z   S rW   r   rX   s     r   rF   z#PyWriter.writes.<locals>.<listcomp>   rY   r   r3   )	extendr%   r$   	cell_typegetr&   r+   strr8   )r   nbr   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   rS   rS   y   s)        ##% % % % %r   rS   )r   
__future__r   renbbaser   r   r   r   rwbaser	   r
   compiler(   	Exceptionr   r   rS   _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 + + +R9 R9 R9 R9 R9~ R9 R9 R9j% % % % %~ % % %> (**
(**|!	r   