Source code for pycropml.code2nbk

""" License, Header

Use pkglts

Generate notebook from code source
"""
from __future__ import print_function
from __future__ import absolute_import
from path import Path
import pycropml.test_generator
from pycropml import render_fortran
import os
from . import render_python as rp
import sys

# The package used to generate Notebook
import nbformat as nbf
import six

[docs]class Model2Nb(object): """ Generate a Jupyter Notebook from a set of models. """ """Generate a notebook for unit test. Args: - code : from the model to code - dir: the directory where the code is generated. - name : name of the jupyter notebook Returns: - None or status """ nb = nbf.v4.new_notebook() def __init__(self, model, code, name, dir=None): self.model = model self.code = code self.name = name self.dir = dir
[docs] def generate_nb(self, language, tg_rep, namep): text = u'''\ # Automatic generation of Notebook using PyCropML This notebook implements a crop model.''' _cells = self.nb['cells'] = [nbf.v4.new_markdown_cell(text)] var = ["Auxiliary", "Rate", "State"] if language in ("cs", "java"): for v in var: fileVar = Path(os.path.join(tg_rep, "%s%s.%s"%(namep.capitalize(),v, language))) with open(fileVar, "r") as var_file: fi = var_file.read() namev = "%s%s"%(namep.capitalize(),v) text = u"""\ ### Domain Class %s"""%namev _cells.append(nbf.v4.new_markdown_cell(text)) _cells.append(nbf.v4.new_code_cell(fi)) text = u"""\ ### Model %s"""%self.name _cells.append(nbf.v4.new_markdown_cell(text)) code_tests = getattr(pycropml.test_generator,"generate_test_%s"%language)(self.model,self.dir) if language in ("cs", "java", "py"): _cells.append(nbf.v4.new_code_cell(self.code)) for code in code_tests: _cells.append(nbf.v4.new_code_cell(code)) elif language == "f90" : list_sub = Path(os.path.join(tg_rep, "list_sub.f90")) if os.path.isfile(list_sub): with open(list_sub, "r") as fi: sub = fi.read() self.code = sub + self.code for code in code_tests: code = self.code + code _cells.append(nbf.v4.new_code_cell(code)) fname = Path(os.path.join(self.dir, "%s.ipynb" % self.name)) if sys.version_info[0]>=3: with open(file = fname, mode ="w", encoding='utf-8') as f: nbf.write(self.nb, f) else: reload(sys) sys.setdefaultencoding('utf-8') with open(fname, "w") as f: nbf.write(self.nb, f)