U
    kuf  ã                   @  s´   d Z ddlm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
é    )ÚannotationsNé   )Ú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   ú4/tmp/pip-unpacked-wheel-zj9qk9v2/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|ŽS )úConvert a string to a notebook)Úto_notebook)ÚselfÚsÚkwargsr   r   r   Úreads/   s    zPyReader.readsc                 K  sê  |  ¡ }g }g }i }d}|D ]„}| d¡s6t |¡r8q| d¡rr| j||f|Ž}|dk	rd| |¡ d}g }i }q| d¡r¬| j||f|Ž}|dk	rž| |¡ d}g }i }q| d¡ræ| j||f|Ž}|dk	rØ| |¡ d}g }i }q| d	¡r$| j||f|Ž}|dk	r| |¡ d
}g }i }q| d¡r˜| j||f|Ž}|dk	rX| |¡ g }t d|¡}	|	dk	rŠd}i }t|	 d¡ƒ|d< nd}i }g }q| |¡ q|rÔ|dkrÔ|  ||¡}|dk	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%   Z
cell_linesÚstateÚlineÚcellÚmÚwsr   r   r   r   3   sp    














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 )zCreate a new cell.r   Ú
)Úinputr   Úhtml)Úsourcer    Úmarkdownr"   Úrawr#   r$   r   )r9   r$   N)ÚjoinÚstripr   Ú_remove_commentsr	   Úgetr   )r   r1   r0   r   Úinput_Útextr$   r   r   r   r+   q   s,    





zPyReader.new_cellc                 C  sN   g }|D ],}|  d¡r*| |dd … ¡ q| |¡ qd |¡}| d¡}|S )Nú#é   r6   )r(   r,   r<   r=   )r   r0   Ú	new_linesr2   rA   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 )zSplit lines into code blocks.r   r   Nr6   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   rL   r9   ÚcodeZstartsÚir   r   r   Úsplit_lines_into_blocks•   s    


(z PyReader.split_lines_into_blocksN)	r   r   r   r   r   r   r+   r>   rR   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rx| d¡}|dk	rv|  ddg¡ |  | ¡ ¡ | d¡ q.|jdkrÆ| d	¡}|dk	rÄ|  d
dg¡ |  dd„ | ¡ D ƒ¡ | d¡ q.|jdkr| d	¡}|dk	rÆ|  ddg¡ |  dd„ | ¡ D ƒ¡ | d¡ q.|jdkrj| d	¡}|dk	rÆ|  ddg¡ |  dd„ | ¡ D ƒ¡ | d¡ q.|jdkr.| d	¡}| dd¡}|dk	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>Ú rP   r7   Nr   r8   r9   r   c                 S  s   g | ]}d | ‘qS ©z# r   ©rF   r2   r   r   r   rH   ¼   s     z#PyWriter.writes.<locals>.<listcomp>r:   r   c                 S  s   g | ]}d | ‘qS rU   r   rV   r   r   r   rH   Â   s     r;   r!   c                 S  s   g | ]}d | ‘qS rU   r   rV   r   r   r   rH   È   s     Úheadingr$   r   z# <headingcell level=%s>c                 S  s   g | ]}d | ‘qS rU   r   rV   r   r   r   rH   Ï   s     r6   )
Úextendr   r   r&   r%   Z	cell_typer?   r'   r,   r<   )r   Únbr   r0   r5   r3   r@   r$   r   r   r   Úwrites§   sR    
þÿ










zPyWriter.writesN)r   r   r   r   rZ   r   r   r   r   rS   ¤   s   rS   )r   Ú
__future__r   r-   Znbbaser   r   r   r   r   r	   r
   Zrwbaser   r   Úcompiler)   Ú	Exceptionr   r   rS   Z_readerZ_writerr   Úreadr   ÚwriterZ   r   r   r   r   Ú<module>   s   $	
x1