include "primitives.alh" include "modelling.alh" include "object_operations.alh" include "typing.alh" Boolean function devs_to_string(model: Element): log("Entering devs_to_string function!") String model_rep Element all_atomics Element curr_atomic Element all_coupleds Element curr_coupled Element string_element Element all_ports Element all_submodels Element curr_port Element curr_submodel Element out_channels Element curr_channel Element possible_parent Element parent String curr_port_name String curr_port_type String curr_submodel_name String curr_submodel_type model_rep = "\nfrom DEVS import *\nfrom infinity import INFINITY\n\n" all_atomics = allInstances(model, "ParallelDEVS/AtomicDEVSBlock") while (read_nr_out(all_atomics) > 0): curr_atomic = set_pop(all_atomics) model_rep = ((model_rep + "class ") + cast_string(read_attribute(model, curr_atomic, "name"))) + "(AtomicDEVS):\n" model_rep = ((model_rep + "\tdef __init__(self, name=") + cast_value(read_attribute(model, curr_atomic, "name"))) + "):\n" model_rep = model_rep + "\t\tAtomicDEVS.__init__(self, name)\n" model_rep = model_rep + "\t\tself.state = self.initialState()\n" model_rep = model_rep + "\t\tself.my_ports = {" all_ports = allAssociationDestinations(model, curr_atomic, "ParallelDEVS/DEVSBlockToPort") while (read_nr_out(all_ports) > 0): curr_port = set_pop(all_ports) curr_port_name = cast_value(read_attribute(model, curr_port, "name")) curr_port_type = read_type(model, curr_port) if (curr_port_type == "ParallelDEVS/InputPort"): model_rep = (((model_rep + curr_port_name) + ": self.addInPort(") + curr_port_name) + ")" if (curr_port_type == "ParallelDEVS/OutputPort"): model_rep = (((model_rep + curr_port_name) + ": self.addOutPort(") + curr_port_name) + ")" if (read_nr_out(all_ports) > 0): model_rep = model_rep + ", " model_rep = model_rep + "}\n" model_rep = model_rep + "\tdef initialState(self):\n" + cast_string(read_attribute(model, curr_atomic, "initialState")) + "\n" model_rep = ((model_rep + "\tdef timeAdvance(self):\n") + cast_string(read_attribute(model, curr_atomic, "timeAdvance"))) + "\n" model_rep = ((model_rep + "\tdef outputFnc(self):\n") + cast_string(read_attribute(model, curr_atomic, "outputFnc"))) + "\n" model_rep = ((model_rep + "\tdef intTransition(self):\n") + cast_string(read_attribute(model, curr_atomic, "intTransition"))) + "\n" model_rep = ((model_rep + "\tdef extTransition(self, my_inputs):\n") + cast_string(read_attribute(model, curr_atomic, "extTransition"))) + "\n" model_rep = ((model_rep + "\tdef confTransition(self, my_inputs):\n") + cast_string(read_attribute(model, curr_atomic, "confTransition"))) + "\n" all_coupleds = allInstances(model, "ParallelDEVS/CoupledDEVSBlock") while (read_nr_out(all_coupleds) > 0): curr_coupled = set_pop(all_coupleds) model_rep = ((model_rep + "class ") + cast_string(read_attribute(model, curr_coupled, "name"))) + "(CoupledDEVS):\n" model_rep = ((model_rep + "\tdef __init__(self, name=") + cast_value(read_attribute(model, curr_coupled, "name"))) + "):\n" model_rep = model_rep + "\t\tCoupledDEVS.__init__(self, name)\n" model_rep = model_rep + "\t\tself.my_ports = {" all_ports = allAssociationDestinations(model, curr_coupled, "ParallelDEVS/DEVSBlockToPort") while (read_nr_out(all_ports) > 0): curr_port = set_pop(all_ports) curr_port_name = cast_value(read_attribute(model, curr_port, "name")) curr_port_type = read_type(model, curr_port) log(curr_port_type) if (curr_port_type == "ParallelDEVS/InputPort"): model_rep = (((model_rep + curr_port_name) + ": self.addInPort(") + curr_port_name) + ")" if (curr_port_type == "ParallelDEVS/OutputPort"): model_rep = (((model_rep + curr_port_name) + ": self.addOutPort(") + curr_port_name) + ")" if (read_nr_out(all_ports) > 0): model_rep = model_rep + ", " model_rep = model_rep + "}\n" model_rep = model_rep + "\t\tself.submodels = {" all_submodels = allAssociationDestinations(model, curr_coupled, "ParallelDEVS/SubModel") while (read_nr_out(all_submodels) > 0): curr_submodel = set_pop(all_submodels) curr_submodel_name = cast_value(read_attribute(model, curr_submodel, "name")) curr_submodel_type = cast_string(read_attribute(model, curr_submodel, "type")) model_rep = ((((((model_rep + curr_submodel_name) + ": self.addSubModel(") + curr_submodel_type) + "(name=") + curr_submodel_name) + ")") + ")" if (read_nr_out(all_submodels) > 0): model_rep = model_rep + ", " model_rep = model_rep + "}\n" all_ports = allAssociationDestinations(model, curr_coupled, "ParallelDEVS/DEVSBlockToPort") while (read_nr_out(all_ports) > 0): curr_port = set_pop(all_ports) out_channels = allAssociationDestinations(model, curr_port, "ParallelDEVS/Channel") while (read_nr_out(out_channels) > 0): curr_channel = set_pop(out_channels) parent = set_pop(allAssociationOrigins(model, curr_channel, "ParallelDEVS/DEVSInstanceToPort")) model_rep = ((((((model_rep + "\t\tself.connectPorts(self.my_ports[") + cast_value(read_attribute(model, curr_port, "name"))) + "], self.submodels[") + cast_value(read_attribute(model, parent, "name"))) + "].my_ports[") + cast_value(read_attribute(model, curr_channel, "name"))) + "])\n" all_submodels = allAssociationDestinations(model, curr_coupled, "ParallelDEVS/SubModel") while (read_nr_out(all_submodels) > 0): curr_submodel = set_pop(all_submodels) curr_submodel_name = cast_value(read_attribute(model, curr_submodel, "name")) log(curr_submodel_name) all_ports = allAssociationDestinations(model, curr_submodel, "ParallelDEVS/DEVSInstanceToPort") while (read_nr_out(all_ports) > 0): curr_port = set_pop(all_ports) out_channels = allAssociationDestinations(model, curr_port, "ParallelDEVS/Channel") log(cast_value(read_nr_out(out_channels))) while (read_nr_out(out_channels) > 0): curr_channel = set_pop(out_channels) possible_parent = allAssociationOrigins(model, curr_channel, "ParallelDEVS/DEVSInstanceToPort") if (read_nr_out(possible_parent) == 0): model_rep = ((((((model_rep + "\t\tself.connectPorts(self.submodels[") + curr_submodel_name) + "].my_ports[") + cast_value(read_attribute(model, curr_port, "name"))) + "], self.my_ports[") + cast_value(read_attribute(model, curr_channel, "name"))) + "])\n" else: parent = set_pop(possible_parent) model_rep = ((((((((model_rep + "\t\tself.connectPorts(self.submodels[") + curr_submodel_name) + "].my_ports[") + cast_value(read_attribute(model, curr_port, "name"))) + "], self.submodels[") + cast_value(read_attribute(model, parent, "name"))) + "].my_ports[") + cast_value(read_attribute(model, curr_channel, "name"))) + "])\n" model_rep = model_rep + "\n" string_element = instantiate_node(model, "MyString/MyString", "my_string") instantiate_attribute(model, string_element, "value", model_rep) log("Printing model_rep...") log("\n" + model_rep) return True!