a
    \Vb  ã                   @   s¨   d 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 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é   )Ú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S )ÚPyReaderErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú/lib/python3.9/site-packages/nbformat/v3/nbpy.pyr   '   s   r   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚPyReaderc                 K   s   | j |fi |¤ŽS )N)Úto_notebook)ÚselfÚsÚkwargsr   r   r   Úreads,   s    zPyReader.readsc                 K   s  |  ¡ }g }g }i }d}|D ]¤}| d¡s6t |¡r8q| d¡rv| j||fi |¤Ž}|d urh| |¡ d}g }i }q| d¡r´| j||fi |¤Ž}|d ur¦| |¡ d}g }i }q| d¡rò| j||fi |¤Ž}|d urä| |¡ d}g }i }q| d¡s
| d	¡r@| j||fi |¤Ž}|d ur2| |¡ d
}g }i }q| d¡r¸| j||fi |¤Ž}|d urx| |¡ g }t d|¡}	|	d urªd}i }t|	 d¡ƒ|d< nd}i }g }q| |¡ q|rô|dkrô|  ||¡}|d urô| |¡ t	|d}
t
|
gd}|S )NÚ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"   Z
cell_linesÚstateÚlineÚcellÚmÚwsÚnbr   r   r   r   /   sr    














zPyReader.to_notebookc                 K   sÊ   |dkr,d  |¡}| d¡}|rÆt|dS nš|dkrP|  |¡}|rÆtd|dS nv|dkrt|  |¡}|rÆtd|dS nR|d	kr˜|  |¡}|rÆtd
|dS n.|dkrÆ|  |¡}| dd¡}|rÆt||dS d S )Nr   Ú
)Úinputr   Úhtml)Úsourcer   Úmarkdownr   Úrawr    r!   r   )r7   r!   )ÚjoinÚstripr   Ú_remove_commentsr   Úgetr   )r   r.   r-   r   r5   Útextr!   r   r   r   r(   m   s,    





zPyReader.new_cellc                 C   sN   g }|D ],}|  d¡r*| |dd … ¡ q| |¡ qd |¡}| d¡}|S )Nú#é   r4   )r%   r)   r:   r;   )r   r-   Z	new_linesr/   r>   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  qXd ||d d … ¡ d¡V  d S )Nr   r   r4   c                 S   s   g | ]}|j d  ‘qS )r   )Úlineno)Ú.0Úxr   r   r   Ú
<listcomp>˜   ó    z4PyReader.split_lines_into_blocks.<locals>.<listcomp>éÿÿÿÿ)ÚlenÚStopIterationÚastr:   ÚparseÚbodyÚranger;   )r   r-   rI   r7   ÚcodeZstartsÚir   r   r   Úsplit_lines_into_blocks   s    


(z PyReader.split_lines_into_blocksN)r   r   r   r   r   r(   r<   rO   r   r   r   r   r   +   s
   >r   c                   @   s   e Zd Zdd„ ZdS )ÚPyWriterc                 K   sÞ  dg}|  dttf dg¡ |jD ]¤}|jD ]–}|jdkrx| d¡}|d urv|  ddg¡ |  | ¡ ¡ | 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rj| 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 )Nz# -*- coding: utf-8 -*-z# <nbformat>%i.%i</nbformat>Ú rM   r5   r   r6   r7   r   c                 S   s   g | ]}d | ‘qS ©z# r   ©rB   r/   r   r   r   rD   ³   rE   z#PyWriter.writes.<locals>.<listcomp>r8   r   c                 S   s   g | ]}d | ‘qS rR   r   rS   r   r   r   rD   ¹   rE   r9   r   c                 S   s   g | ]}d | ‘qS rR   r   rS   r   r   r   rD   ¿   rE   Zheadingr!   r   z# <headingcell level=%s>c                 S   s   g | ]}d | ‘qS rR   r   rS   r   r   r   rD   Æ   rE   r4   )
Úextendr   r   r#   r"   Z	cell_typer=   r$   r)   r:   )r   r3   r   r-   r2   r0   r5   r!   r   r   r   ÚwritesŸ   sR    
þÿ










zPyWriter.writesN)r   r   r   rU   r   r   r   r   rP   ž   s   rP   )Ú__doc__r*   Znbbaser   r   r   r   r   r   r	   Zrwbaser
   r   Úcompiler&   Ú	Exceptionr   r   rP   Z_readerZ_writerr   Úreadr   ÚwriterU   r   r   r   r   Ú<module>   s   $	
s.