parent
0abd40b584
commit
6b73eaf886
2 changed files with 151 additions and 0 deletions
@ -0,0 +1,103 @@ |
|||||||
|
import json |
||||||
|
import sys |
||||||
|
from os import path |
||||||
|
|
||||||
|
header_comment = '# %%\n' |
||||||
|
|
||||||
|
def py2nb(py_str): |
||||||
|
# remove leading header comment |
||||||
|
if py_str.startswith(header_comment): |
||||||
|
py_str = py_str[len(header_comment):] |
||||||
|
|
||||||
|
cells = [] |
||||||
|
chunks = py_str.split('\n\n%s' % header_comment) |
||||||
|
|
||||||
|
for chunk in chunks: |
||||||
|
cell_type = 'code' |
||||||
|
new_json = {'metadata':{}} |
||||||
|
if chunk.startswith('# !!'): |
||||||
|
new_json = json.loads("\n".join([x.strip() for x in chunk.splitlines() if '# !!' in x]).replace('# !!','')) |
||||||
|
chunk = "\n".join([x for x in chunk.splitlines() if '# !!' not in x]) |
||||||
|
if chunk.startswith("'''"): |
||||||
|
chunk = chunk.strip("'\n") |
||||||
|
cell_type = 'markdown' |
||||||
|
elif chunk.startswith('"""'): |
||||||
|
chunk = chunk.strip('"\n') |
||||||
|
cell_type = 'markdown' |
||||||
|
|
||||||
|
cell = { |
||||||
|
'cell_type': cell_type, |
||||||
|
'metadata': new_json['metadata'], |
||||||
|
'source': chunk.splitlines(True), |
||||||
|
} |
||||||
|
|
||||||
|
if cell_type == 'code': |
||||||
|
cell.update({'outputs': [], 'execution_count': None}) |
||||||
|
|
||||||
|
cells.append(cell) |
||||||
|
|
||||||
|
notebook = { |
||||||
|
'cells': cells, |
||||||
|
'metadata': { |
||||||
|
'anaconda-cloud': {}, |
||||||
|
'accelerator': 'GPU', |
||||||
|
'colab': { |
||||||
|
'collapsed_sections': [ |
||||||
|
'CreditsChTop', |
||||||
|
'TutorialTop', |
||||||
|
'CheckGPU', |
||||||
|
'InstallDeps', |
||||||
|
'DefMidasFns', |
||||||
|
'DefFns', |
||||||
|
'DefSecModel', |
||||||
|
'DefSuperRes', |
||||||
|
'AnimSetTop', |
||||||
|
'ExtraSetTop' |
||||||
|
], |
||||||
|
'machine_shape': 'hm', |
||||||
|
'name': 'Disco Diffusion v5.1 [w/ Turbo]', |
||||||
|
'private_outputs': True, |
||||||
|
'provenance': [], |
||||||
|
'include_colab_link': True |
||||||
|
}, |
||||||
|
'kernelspec': { |
||||||
|
'display_name': 'Python 3', |
||||||
|
'language': 'python', |
||||||
|
'name': 'python3' |
||||||
|
}, |
||||||
|
'language_info': { |
||||||
|
'codemirror_mode': { |
||||||
|
'name': 'ipython', |
||||||
|
'version': 3 |
||||||
|
}, |
||||||
|
'file_extension': '.py', |
||||||
|
'mimetype': 'text/x-python', |
||||||
|
'name': 'python', |
||||||
|
'nbconvert_exporter': 'python', |
||||||
|
'pygments_lexer': 'ipython3', |
||||||
|
'version': '3.6.1' |
||||||
|
} |
||||||
|
}, |
||||||
|
'nbformat': 4, |
||||||
|
'nbformat_minor': 4 |
||||||
|
} |
||||||
|
|
||||||
|
return notebook |
||||||
|
|
||||||
|
|
||||||
|
def convert(in_file, out_file): |
||||||
|
_, in_ext = path.splitext(in_file) |
||||||
|
_, out_ext = path.splitext(out_file) |
||||||
|
|
||||||
|
if in_ext == '.py' and out_ext == '.ipynb': |
||||||
|
with open(in_file, 'r', encoding='utf-8') as f: |
||||||
|
py_str = f.read() |
||||||
|
notebook = py2nb(py_str) |
||||||
|
with open(out_file, 'w', encoding='utf-8') as f: |
||||||
|
json.dump(notebook, f, indent=2) |
||||||
|
|
||||||
|
else: |
||||||
|
raise(Exception('Extensions must be .ipynb and .py or vice versa')) |
||||||
|
|
||||||
|
|
||||||
|
convert('disco.py', 'Disco_Diffusion.ipynb') |
@ -0,0 +1,48 @@ |
|||||||
|
import json |
||||||
|
import sys |
||||||
|
from os import path |
||||||
|
|
||||||
|
header_comment = '# %%\n' |
||||||
|
|
||||||
|
def nb2py(notebook): |
||||||
|
result = [] |
||||||
|
cells = notebook['cells'] |
||||||
|
|
||||||
|
for cell in cells: |
||||||
|
cell_type = cell['cell_type'] |
||||||
|
metadata = cell['metadata'] |
||||||
|
format_metadata = json.dumps(metadata,indent=2).split("\n") |
||||||
|
reformat_metadata = '# !! {"metadata":' |
||||||
|
for key in format_metadata: |
||||||
|
if key == '{': |
||||||
|
reformat_metadata+=f"{key}\n" |
||||||
|
elif key == '}': |
||||||
|
reformat_metadata+="# !! "+key+"}\n" |
||||||
|
else: |
||||||
|
reformat_metadata+=f'# !! {key}\n' |
||||||
|
|
||||||
|
if cell_type == 'markdown': |
||||||
|
result.append('%s"""\n%s\n"""'% |
||||||
|
(header_comment+reformat_metadata, ''.join(cell['source']))) |
||||||
|
|
||||||
|
if cell_type == 'code': |
||||||
|
result.append("%s%s" % (header_comment+reformat_metadata, ''.join(cell['source']))) |
||||||
|
|
||||||
|
return '\n\n'.join(result) |
||||||
|
|
||||||
|
def convert(in_file, out_file): |
||||||
|
_, in_ext = path.splitext(in_file) |
||||||
|
_, out_ext = path.splitext(out_file) |
||||||
|
|
||||||
|
if in_ext == '.ipynb' and out_ext == '.py': |
||||||
|
with open(in_file, 'r', encoding='utf-8') as f: |
||||||
|
notebook = json.load(f) |
||||||
|
py_str = nb2py(notebook) |
||||||
|
with open(out_file, 'w', encoding='utf-8') as f: |
||||||
|
f.write(py_str) |
||||||
|
|
||||||
|
else: |
||||||
|
raise(Exception('Extensions must be .ipynb and .py or vice versa')) |
||||||
|
|
||||||
|
|
||||||
|
convert('Disco_Diffusion.ipynb', 'disco.py') |
Loading…
Reference in new issue