o
    º¼tf  ã                   @  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   úY/var/www/html/software/conda/envs/catlas/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   Úreads/   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	¡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%   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 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   )r9   r$   N)ÚjoinÚstripr   Ú_remove_commentsr	   Úgetr   )r   r1   r0   r   Úinput_Útextr$   r   r   r   r+   q   s8   


ÿ
ÿ
ÿ
ÿ
ü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  q-d ||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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>Ú rP   r7   Nr   r8   r9   r   c                 S  ó   g | ]}d | ‘qS ©z# r   ©rF   r2   r   r   r   rH   ¼   ó    z#PyWriter.writes.<locals>.<listcomp>r:   r   c                 S  rU   rV   r   rW   r   r   r   rH   Â   rX   r;   r!   c                 S  rU   rV   r   rW   r   r   r   rH   È   rX   Úheadingr$   r   z# <headingcell level=%s>c                 S  rU   rV   r   rW   r   r   r   rH   Ï   rX   r6   )
Úextendr   r   r&   r%   Z	cell_typer?   r'   r,   r<   )r   Únbr   r0   r5   r3   r@   r$   r   r   r   Úwrites§   s^   
þÿ




€


€


€


€


€á
 
zPyWriter.writesN)r   r   r   r   r\   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   Ú_readerZ_writerr   Úreadr   Úwriter\   r   r   r   r   Ú<module>   s     $	
x1
