def write(self): """Populate and write the test files. """ if self.language=="f90": render_fortran.Model2Package(self.models, self.dir).write_tests() if self.language=="py": render_cyml.Model2Package(self.models, self.dir).write_tests()
def transpile_package(package, language): # translate from crop2ml package sourcef = package pkg = Path(sourcef) models = model_parser(pkg) # parse xml files and create python model object output = pkg/'src' dir_test= pkg/'test' m=[model.name for model in models] # Generate packages if the directories does not exists. if not output.isdir(): output.mkdir() if not dir_test.isdir(): dir_test.mkdir() m2p = render_cyml.Model2Package(models, dir=output) m2p.generate_package() # generate cyml models in "pyx" directory tg_rep = Path(output/"%s"%(language)) # target language models directory in output dir_test_lang = Path(dir_test/"%s"%(language)) if not tg_rep.isdir(): tg_rep.mkdir() if not dir_test_lang.isdir() : #Create if it doesn't exist dir_test_lang.mkdir() # generate cyml_rep = Path(output/'pyx') # cyml model directory in output for k, file in enumerate(cyml_rep.files()): #print(file) with open(file, 'r') as fi: source = fi.read() name = os.path.split(file)[1].split(".")[0] for model in models: # in the case we have'nt the same order if name == model.name.lower(): test=Main(file, language, model) test.parse() test.to_ast(source) code=test.to_source() filename = tg_rep/"%s.%s"%(name, language) with open(filename, "wb") as tg_file: tg_file.write(code.encode('utf-8')) # writeTest test = WriteTest(models,language,dir_test_lang) test.write() status = 0 return status
def transpile_package(package, language): # translate from crop2ml package sourcef = package namep = sourcef.split(".")[0] pkg = Path(sourcef) models = model_parser( pkg) # parse xml files and create python model object output = Path(os.path.join(pkg, 'src')) dir_test = Path(os.path.join(pkg, 'test')) # Generate packages if the directories does not exists. if not output.isdir(): output.mkdir() if not dir_test.isdir(): dir_test.mkdir() m2p = render_cyml.Model2Package(models, dir=output) m2p.generate_package() # generate cyml models in "pyx" directory tg_rep = Path(os.path.join( output, language)) # target language models directory in output dir_test_lang = Path(os.path.join(dir_test, language)) if not tg_rep.isdir(): tg_rep.mkdir() if not dir_test_lang.isdir(): #Create if it doesn't exist dir_test_lang.mkdir() m2p.write_tests() # generate cyml_rep = Path(os.path.join(output, 'pyx')) # cyml model directory in output T = Topology(namep, package) T_pyx = T.algo2cyml() namep = T.model.name.lower() fileT = Path(os.path.join(cyml_rep, "%s.pyx" % namep)) with open(fileT, "wb") as tg_file: tg_file.write(T_pyx.encode('utf-8')) if language in ("cs", "java"): getattr( getattr(pycropml.transpiler.generators, '%sGenerator' % NAMES[language]), 'to_struct_%s' % language)([T.model], tg_rep, namep) to_wrapper_cs(T.model, tg_rep, namep) if language == "cs" else "" filename = Path( os.path.join(tg_rep, "%s.%s" % (namep.capitalize(), language))) with open(filename, "wb") as tg_file: tg_file.write(T.compotranslate(language).encode('utf-8')) for k, file in enumerate(cyml_rep.files()): #print(file) with open(file, 'r') as fi: source = fi.read() name = os.path.split(file)[1].split(".")[0] for model in models: # in the case we have'nt the same order if name.lower() == model.name.lower( ) and prefix(model) != "function": test = Main(file, language, model, T.model.name) test.parse() test.to_ast(source) code = test.to_source() filename = Path( os.path.join(tg_rep, "%s.%s" % (name.capitalize(), language))) with open(filename, "wb") as tg_file: tg_file.write(code.encode('utf-8')) Model2Nb(model, code, name, dir_test_lang).generate_nb(language, tg_rep, namep) #code2nbk.generate_notebook(code, name, dir_nb_lang) # writeTest '''TODO''' #test = WriteTest(models,language,dir_test_lang) #test.write() status = 0 return status
def transpile_package(package, language): """ translate from crop2ml package""" sourcef = package namep = sourcef.split(os.path.sep)[-1] pkg = Path(sourcef) models = model_parser( pkg) # parse xml files and create python model object output = Path(os.path.join(pkg, 'src')) dir_test = Path(os.path.join(pkg, 'test')) # Generate packages if the directories does not exists. if not output.isdir(): output.mkdir() if not dir_test.isdir(): dir_test.mkdir() m2p = render_cyml.Model2Package(models, dir=output) m2p.generate_package() # generate cyml models in "pyx" directory tg_rep1 = Path(os.path.join( output, language)) # target language models directory in output dir_test_lang = Path(os.path.join(dir_test, language)) if not tg_rep1.isdir(): tg_rep1.mkdir() tg_rep = Path(os.path.join(tg_rep1, namep)) if not tg_rep.isdir(): tg_rep.mkdir() if not dir_test_lang.isdir(): #Create if it doesn't exist dir_test_lang.mkdir() m2p.write_tests() # generate cyml functions cyml_rep = Path(os.path.join(output, 'pyx')) # cyml model directory in output # cretae topology of composite model T = Topology(namep, package) namep = T.model.name # Record VPZ if language == "record": vpz = Crop2ML_Vpz(T) print(vpz.create()) # domain class if language in domain_class: getattr( getattr(pycropml.transpiler.generators, '%sGenerator' % NAMES[language]), 'to_struct_%s' % language)([T.model], tg_rep, namep) # wrapper if language in wrapper: getattr( getattr(pycropml.transpiler.generators, '%sGenerator' % NAMES[language]), 'to_wrapper_%s' % language)(T.model, tg_rep, namep) # Transform model unit to languages and platforms for k, file in enumerate(cyml_rep.files()): with open(file, 'r') as fi: source = fi.read() name = os.path.split(file)[1].split(".")[0] for model in models: # in the case we have'nt the same order if name.lower() == model.name.lower( ) and prefix(model) != "function": test = Main(file, language, model, T.model.name) test.parse() test.to_ast(source) code = test.to_source() filename = Path( os.path.join(tg_rep, "%s.%s" % (name.capitalize(), ext[language]))) with open(filename, "wb") as tg_file: tg_file.write(code.encode('utf-8')) Model2Nb(model, code, name, dir_test_lang).generate_nb(language, tg_rep, namep) #code2nbk.generate_notebook(code, name, dir_nb_lang) # Create Cyml Composite model T_pyx = T.algo2cyml() fileT = Path(os.path.join(cyml_rep, "%sComponent.pyx" % namep)) with open(fileT, "wb") as tg_file: tg_file.write(T_pyx.encode('utf-8')) filename = Path( os.path.join(tg_rep, "%sComponent.%s" % (namep, ext[language]))) with open(filename, "wb") as tg_file: tg_file.write(T.compotranslate(language).encode('utf-8')) ## create computing algorithm if language == "py": simulation = PythonSimulation(T.model) simulation.generate() code = ''.join(simulation.result) filename = Path(os.path.join(tg_rep, "simulation.py")) initfile = Path(os.path.join(tg_rep, "__init__.py")) with open(filename, "wb") as tg_file: tg_file.write(code.encode("utf-8")) with open(initfile, "wb") as tg_file: tg_file.write("".encode("utf-8")) setup = PythonSimulation(T.model) setup.generate_setup() code = ''.join(setup.result) setupfile = Path(os.path.join(tg_rep1, "setup.py")) with open(setupfile, "wb") as tg_file: tg_file.write(code.encode("utf-8")) status = 0 return status
def test_pkg2py_phen(): models = pparse.model_parser(pkg_pheno) m2p = render_cyml.Model2Package(models, dir='.', pkg_name="Phenology") m2p.run() transpile_package(pkg_pheno, "py")
def test_pkg2py_nrj(): models = pparse.model_parser(pkg_nrj) m2p = render_cyml.Model2Package(models, dir='.', pkg_name="EnergyBalance") m2p.run() transpile_package(pkg_nrj, "py")