
    f                    >   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j0                  Zy)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y)PyReaderErrorz An error raised by the PyReader.N)__name__
__module____qualname____doc__     K/var/www/cvtools/html/venv/lib/python3.12/site-packages/nbformat/v2/nbpy.pyr   r       s    *r   r   c                  .    e Zd ZdZd Zd Zd Zd Zd Zy)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                   |j                         }g }g }d}|D ]  }|j                  d      st        j                  |      r*|j                  d      r*| j	                  ||      }||j                  |       d}g }e|j                  d      r*| j	                  ||      }||j                  |       d}g }|j                  d      r*| j	                  ||      }||j                  |       d}g }|j                  |        |r*|dk(  r%| j	                  ||      }||j                  |       t        |      }	t        |	g	      S )
r   codecellz# <nbformat># <codecell># <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+   sE    "
 	(D~.2J2P2PQU2V0}}UJ7#LL&"
0}}UJ7#LL&"
!34}}UJ7#LL&&
!!$'-	(. %:-==
3DT"'t,,r   c                   |dk(  r1dj                  |      }|j                  d      }|rt        |      S y	|dk(  r!| j                  |      }|rt	        d|      S y	|dk(  r!| j                  |      }|rt	        d|      S y	y	)
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$622 j ((/D$VD99 n$((/D$Z==  %r   c                    g }|D ]9  }|j                  d      r|j                  |dd         )|j                  |       ; dj                  |      }|j                  d      }|S )N#   r3   )r'   r+   r8   r9   )r   r,   	new_linesr/   r<   s        r   r:   zPyReader._remove_comments_   sg    	 	'Ds#  ab*  &		'
 yy#zz$r   c              #    K   t        |      dk(  r|d    t               ddl}dj                  |      }|j	                  |      }|j
                  D cg c]  }|j                  dz
   }}t        t        |      dz
        D ]0  }dj                  |||   ||dz             j                  d       2 dj                  ||d   d       j                  d       yc c}w w)zSplit lines into code blocks.r   r   Nr3   )	lenStopIterationastr8   parsebodylinenoranger9   )r   r,   rE   r6   codexstartsis           r   split_lines_into_blocksz PyReader.split_lines_into_blocksj   s     u:?(N/!5!yy (,		21!((Q,22s6{Q' 	JA))E&)fQUm<=CCDII	JiifRjl+,22488 3s   AC&C!,A:C&N)	r   r   r   r   r   r   r*   r:   rN   r   r   r   r   r   $   s    #-"-H> 	9r   r   c                      e Zd ZdZd Zy)PyWriterzA Python notebook writer.c           	        dg}|j                  ddg       |j                  D ]n  }|j                  D ][  }|j                  dk(  rX|j	                  d      }|'|j                  ddg       |j                  |j                                |j                  d       k|j                  dk(  ri|j	                  d      }||j                  d	dg       |j                  |j                         D cg c]  }d
|z   	 c}       |j                  d       |j                  dk(  s|j	                  d      }||j                  ddg       |j                  |j                         D cg c]  }d
|z   	 c}       |j                  d       ^ q |j                  d       t        dj                  |            S c c}w c c}w )z&Convert a notebook object to a string.z# -*- coding: utf-8 -*-z# <nbformat>2</nbformat> rJ   r4   r   r5   r6   r    z# r7   r"   r3   )	extendr%   r$   	cell_typegetr&   r+   strr8   )r   nbr   r,   r1   r0   r;   r/   s           r   writeszPyWriter.writes|   s   *+0"56-- 	)B )>>V+!XXg.F)nb%9:V%6%6%89R(^^v-!XXh/F)nb%9:f>O>O>Q%RddTk%RSR(^^z1!XXh/F)&8"%=>f>O>O>Q%RddTk%RSR(%)	)( 	R499U#$$ &S &Ss   1G +GN)r   r   r   r   rX   r   r   r   rP   rP   y   s
    #%r   rP   )r   
__future__r   renbbaser   r   r   r   rwbaser	   r
   compiler(   	Exceptionr   r   rP   _reader_writerr   readr   writerX   r   r   r   <module>rc      s   " # 	 M M 2 &2::&CD +I +R9~ R9j%~ %> *
*||!!	r   