o
    ¹i  ã                   @   s´   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 d¡ZG dd	„ d	eƒZG d
d„ deƒZG d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                   @   s   e Zd ZdZdS )ÚPyReaderErrorz%An error raised for a pyreader error.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úK/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/nbformat/v3/nbpy.pyr   (   s    r   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚPyReaderzA python notebook reader.c                 K   s   | j |fi |¤ŽS )úConvert a string to a notebook)Úto_notebook)ÚselfÚsÚkwargsr   r   r   Úreads1   s   zPyReader.readsc                 K   sú  |  ¡ }g }g }i }d}|D ]Ì}| d¡st |¡rq| d¡r:| j||fi |¤Ž}|dur3| |¡ d}g }i }q| d¡rY| j||fi |¤Ž}|durR| |¡ d}g }i }q| d¡rx| j||fi |¤Ž}|durq| |¡ d}g }i }q| d	¡s‚| d
¡rœ| j||fi |¤Ž}|dur•| |¡ d}g }i }q| d¡rÕ| j||fi |¤Ž}|dur¶| |¡ g }t d|¡}	|	durÎd}i }t|	 d¡ƒ|d< qd}i }g }q| |¡ q|rð|dkrð|  ||¡}|durð| |¡ t	|d}
t
|
gd}|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Únbr   r   r   r   5   sr   










zPyReader.to_notebookc                 K   sÖ   |dkrd  |¡}| d¡}|rt|dS dS |dkr*|  |¡}|r(td|dS dS |dkr=|  |¡}|r;td|dS dS |d	krP|  |¡}|rNtd
|dS dS |dkrg|  |¡}| dd¡}|rit||dS dS dS )zCreate a new cell.r   Ú
)Úinputr   Úhtml)Úsourcer    Úmarkdownr"   Úrawr#   r$   r   )r;   r$   N)ÚjoinÚstripr   Ú_remove_commentsr	   Úgetr   )r   r2   r0   r   r9   Útextr$   r   r   r   r+   t   s8   


ÿ
ÿ
ÿ
ÿ
üzPyReader.new_cellc                 C   sN   g }|D ]}|  d¡r| |dd … ¡ q| |¡ qd |¡}| d¡}|S )Nú#é   r8   )r(   r,   r>   r?   )r   r0   Ú	new_linesr3   rB   r   r   r   r@      s   


zPyReader._remove_commentsc                 c   s¨    t |ƒdkr|d V  tƒ ‚ddl}d |¡}| |¡}dd„ |jD ƒ}tt |ƒd ƒD ]}d ||| ||d  … ¡ d¡V  q-d ||d d… ¡ d¡V  dS )zSplit lines into code blocks.r   r   Nr8   c                 S   s   g | ]}|j d  ‘qS )r   )Úlineno)Ú.0Úxr   r   r   Ú
<listcomp>¡   s    z4PyReader.split_lines_into_blocks.<locals>.<listcomp>éÿÿÿÿ)ÚlenÚStopIterationÚastr>   ÚparseÚbodyÚranger?   )r   r0   rM   r;   ÚcodeÚstartsÚir   r   r   Úsplit_lines_into_blocks˜   s   €


("z PyReader.split_lines_into_blocksN)	r   r   r   r   r   r   r+   r@   rT   r   r   r   r   r   .   s    ?r   c                   @   s   e Zd ZdZdd„ ZdS )ÚPyWriterzA Python notebook writer.c                 K   sÒ  dg}|  dttf dg¡ |jD ]Í}|jD ]Ç}|jdkr:| d¡}|dur9|  ddg¡ |  | ¡ ¡ | d¡ q|jdkra| d	¡}|dur`|  d
dg¡ |  dd„ | ¡ D ƒ¡ | d¡ q|jdkrˆ| d	¡}|dur‡|  ddg¡ |  dd„ | ¡ D ƒ¡ | d¡ q|jdkr¯| d	¡}|dur®|  ddg¡ |  dd„ | ¡ D ƒ¡ | d¡ q|jdkrÝ| d	¡}| dd¡}|durÝ|  d| dg¡ |  dd„ | ¡ D ƒ¡ | d¡ qq| d¡ d 	|¡S )zConvert a notebook to a string.z# -*- coding: utf-8 -*-z# <nbformat>%i.%i</nbformat>Ú rQ   r9   Nr   r:   r;   r   c                 S   ó   g | ]}d | ‘qS ©z# r   ©rG   r3   r   r   r   rI   ¿   ó    z#PyWriter.writes.<locals>.<listcomp>r<   r   c                 S   rW   rX   r   rY   r   r   r   rI   Å   rZ   r=   r!   c                 S   rW   rX   r   rY   r   r   r   rI   Ë   rZ   Úheadingr$   r   z# <headingcell level=%s>c                 S   rW   rX   r   rY   r   r   r   rI   Ò   rZ   r8   )
Úextendr   r   r&   r%   Ú	cell_typerA   r'   r,   r>   )r   r7   r   r0   r6   r4   r9   r$   r   r   r   Úwritesª   s^   
þÿ




€


€


€


€


€á
 
zPyWriter.writesN)r   r   r   r   r^   r   r   r   r   rU   §   s    rU   )r   r-   Útypingr   Únbbaser   r   r   r   r   r	   r
   Úrwbaser   r   Úcompiler)   Ú	Exceptionr   r   rU   Ú_readerÚ_writerr   Úreadr   Úwriter^   r   r   r   r   Ú<module>   s     $	
y1
