Source code for pycropml.cyml

# -*- coding: utf-8 -*-
"""
Created on Tue Mar 19 22:59:23 2019

@author: midingoy
"""
import os
from path import Path
import pycropml
from pycropml.transpiler.main import Main
from pycropml import render_cyml
from pycropml.pparse import model_parser
from pycropml.writeTest import WriteTest
from pycropml.transpiler.generators.csharpGenerator import to_struct_cs, to_wrapper_cs
from pycropml.transpiler.generators.javaGenerator import to_struct_java
from pycropml.topology import Topology
from pycropml.code2nbk import Model2Nb
from pycropml.transpiler.generators.siriusGenerator import to_struct_sirius,to_wrapper_sirius

NAMES = {'cs':'csharp', 'py':'python', 'f90':'fortran', 'java':'java', 'simplace':'simplace', 'sirius':'sirius', "openalea":"openalea","check":"check"}

[docs]def transpile_file(source, language): sourcef = source file = Path(sourcef) with open(file, 'r') as fi: source = fi.read() name = sourcef.split(".")[0] test = Main(file, language) test.parse() test.to_ast(source) code = test.to_source() print(code) filename = "%s.%s" % (name, language) with open(filename, "wb") as tg_file: tg_file.write(code.encode('utf-8')) return 0
[docs]def prefix(model): pref = model.modelid.split(".")[0] return pref
[docs]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 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.lower() # domain class if language in ("cs", "java", 'sirius'): getattr(getattr(pycropml.transpiler.generators, '%sGenerator' % NAMES[language]), 'to_struct_%s' % language)([T.model],tg_rep, namep) if language =="cs": to_wrapper_cs(T.model,tg_rep, namep) if language =="sirius": to_wrapper_sirius(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.capitalize(), ext(language)))) with open(filename, "wb") as tg_file: tg_file.write(T.compotranslate(language).encode('utf-8')) # writeTest '''TODO''' #test = WriteTest(models,language,dir_test_lang) #test.write() status = 0 return status
[docs]def ext(language): if language=="sirius": return "cs" elif language =="simplace": return "java" elif language =="openalea": return "py" else: return language