Source code for pycropml.transpiler.generators.siriusGenerator

# coding: utf8
from pycropml.transpiler.codeGenerator import CodeGenerator
from pycropml.transpiler.rules.csharpRules import CsharpRules
from pycropml.transpiler.generators.docGenerator import DocGenerator
from pycropml.transpiler.pseudo_tree import Node
import os
from path import Path
from pycropml.transpiler.Parser import parser
from pycropml.transpiler.ast_transform import AstTransformer, transform_to_syntax_tree
from pycropml import code2nbk
from pycropml.transpiler.generators.csharpGenerator import CsharpGenerator, CsharpTrans,CsharpCompo

[docs]class SiriusGenerator(CsharpGenerator): """ This class contains the specific properties of Csharp language and use the NodeVisitor to generate a csharp code source from a well formed syntax tree. """ def __init__(self, tree=None, model=None, name=None): self.tree = tree self.model=model self.name = name self.indent_with=' '*4 CsharpGenerator.__init__(self, tree, model, name)
[docs]class SiriusTrans(CsharpTrans): """ This class used to generates states, rates and auxiliary classes for Sirius. """ def __init__(self, models): self.models = models CsharpTrans.__init__(self, self.models)
[docs]def to_struct_sirius(models, rep, name): generator = CsharpTrans(models) generator.result=[u"using System;\nusing System.Collections.Generic;\n"] generator.model2Node() states = generator.node_states generator.generate(states, "%sState"%name.capitalize()) z= ''.join(generator.result) filename = Path(os.path.join(rep, "%sState.cs"%name.capitalize())) with open(filename, "wb") as tg_file: tg_file.write(z.encode('utf-8')) rates = generator.node_rates generator.result=[u"using System;\nusing System.Collections.Generic;\n"] generator.generate(rates, "%sRate"%name.capitalize()) z1= ''.join(generator.result) filename = Path(os.path.join(rep, "%sRate.cs"%name.capitalize())) with open(filename, "wb") as tg1_file: tg1_file.write(z1.encode('utf-8')) auxiliary = generator.node_auxiliary generator.result=[u"using System;\nusing System.Collections.Generic;\n"] generator.generate(auxiliary, "%sAuxiliary"%name.capitalize()) z2= ''.join(generator.result) filename = Path(os.path.join(rep, "%sAuxiliary.cs"%name.capitalize())) with open(filename, "wb") as tg2_file: tg2_file.write(z2.encode('utf-8')) return 0
''' Csharp composite'''
[docs]class SiriusCompo(CsharpCompo): """ This class used to generates states, rates and auxiliary classes for C# languages. """ def __init__(self, tree=None, model=None, name=None): self.model=model self.tree = tree self.name = name CsharpCompo.__init__(self, tree, model, name)
[docs] def visit_module(self, node): self.write("namespace SiriusModel.Model.Strategies") self.newline(node) self.write("{") self.indentation += 1 self.newline(node) self.write("public class %sComponent"%self.model.name.capitalize()) self.newline(node) self.write("{") self.newline(node) self.indentation += 1 self.visit(node.body) self.newline(node) if "function" in dir(self.model) and self.model.function: func_name = os.path.split(self.model.function[0].filename)[1] func_path = os.path.join(self.model.path,"src","pyx", func_name) func_tree=parser(Path(func_path)) newtree = AstTransformer(func_tree, func_path) dictAst = newtree.transformer() nodeAst= transform_to_syntax_tree(dictAst) self.model=None self.visit(nodeAst.body) self.indentation -= 1 self.newline(node) self.write("}") self.newline(extra=1) self.indentation -= 1 self.write("}")
[docs] def wrapper(self): self.write("using SQCrop2ML_%s.DomainClass;"%self.model.name.capitalize()) self.newline(1) self.write("using SQCrop2ML_%s.Strategies;"%self.model.name.capitalize()) self.newline(extra=1) self.write("namespace SiriusModel.Model.%s"%self.model.name.capitalize()) self.newline(1) self.write("{") self.newline(1) self.indentation += 1 self.write("class %sWrapper : UniverseLink"%self.model.name.capitalize()) self.newline(1) self.write("{") self.newline(1) self.indentation += 1 self.privateWrap() self.constrWrap() self.newline(extra=1) self.outputWrap() self.newline(extra=1) self.copyconstrWrap() self.newline(extra=1) self.initWrap() self.newline(extra=1) self.loadParamWrap() self.newline(extra=1) self.estimateWrap() self.newline(extra=1) self.indentation -= 1 self.write("}") self.newline(extra=1) self.indentation -= 1 self.write("}")
[docs] def constrWrap(self): name = self.model.name self.write("public %sWrapper(Universe universe) : base(universe)"%(name.capitalize())) self.newline(1) self.write("{") self.newline(1) self.indentation += 1 self.write("s = new %sState();"%(name.capitalize())) self.newline(1) self.write("r = new %sRate();"%(name.capitalize())) self.newline(1) self.write("a = new %sAuxiliary();"%(name.capitalize())) self.newline(1) self.write("%sComponent = new %s();"%(name.lower(), name.capitalize())) self.newline(1) self.write("loadParameters();") self.newline(1) self.indentation -= 1 self.write("}")
[docs] def copyconstrWrap(self): self.write("public %sWrapper(Universe universe, %sWrapper toCopy, bool copyAll) : base(universe)"%(self.model.name.capitalize(),self.model.name.capitalize())) self.newline(1) self.write("{") self.newline(1) self.indentation += 1 self.write("s = (toCopy.s != null) ? new %sState(toCopy.s, copyAll) : null;"%(self.model.name.capitalize())) self.newline(1) self.newline(1) self.write("r = (toCopy.r != null) ? new %sRate(toCopy.r, copyAll) : null;"%(self.model.name.capitalize())) self.newline(1) self.write("a = (toCopy.a != null) ? new %sAuxiliary(toCopy.a, copyAll) : null;"%(self.model.name.capitalize())) self.newline(1) self.write("if (copyAll)") self.newline(1) self.write("{") self.newline(1) self.indentation += 1 self.write("%sComponent = (toCopy.%sComponent != null) ? new %s(toCopy.%sComponent) : null;"%(self.model.name.lower(),self.model.name.lower(),self.model.name.capitalize(),self.model.name.lower())) self.newline(1) self.indentation -= 1 self.write("}") self.newline(1) self.indentation -= 1 self.write("}")
[docs]def to_wrapper_sirius(models, rep, name): generator = SiriusCompo(model = models) generator.result=[u"using System;\nusing System.Collections.Generic;\nusing System.Linq;\n"] generator.model2Node() generator.wrapper() z= ''.join(generator.result) filename = Path(os.path.join(rep, "%sWrapper.cs"%name.capitalize())) with open(filename, "wb") as tg2_file: tg2_file.write(z.encode('utf-8')) return 0