12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import sys
- sys.path.append("../wrappers")
- from wrappers import modelverse as mv
- from commons import *
- class NodeAdd(object):
- def __init__(self):
- self._node_type = ""
- def execute(self, model, node_type, local):
- """
- Add a new node with type node_type to model model.
- If local is true, the node is only added to the model.
- If local is false, the node will be added to all models.
- """
- self._node_type = node_type
- if local:
- mv.transformation_execute_MANUAL("graph_ops/add_node", {"gm":model}, {"gm":model},
- callback=self._callback)
- else:
- for m in all_models():
- self.execute(m, node_type, local=True)
- def _callback(self, model):
- node_id = mv.instantiate(model, "gm/Node")
- mv.attr_assign(model, node_id, "typeID", self._node_type)
- class NodeDelete(object):
- def __init__(self):
- self._node = ""
- self._node_type = ""
- def execute(self, model, node, local, check_if_last=False):
- self._node = node
- self._node_type = get_node_type(model, node)
- if local:
- mv.transformation_execute_MANUAL("graph_ops/del_node", {"gm":model}, {"gm":model},
- callback=self._callback)
- if check_if_last:
- # check if we just deleted the last instance of the node in all example models
- # if yes, delete it in instance models as well to preserve their validity
- remaining_instances = 0
- for m in all_example_models():
- remaining_instances += len(all_nodes_with_type(m, self._node_type))
- if remaining_instances == 0:
- # it was indeed the last one, delete from instance models
- for m in all_instance_models():
- nodes_to_delete = all_nodes_with_type(m, self._node_type)
- for node in nodes_to_delete:
- self.execute(m, node, local=True)
- else:
- for m in all_models():
- nodes_to_delete = all_nodes_with_type(m, self._node_type)
- for node in nodes_to_delete:
- self.execute(m, node, local=True)
- def _callback(self, model):
- mv.delete_element(model, "gm/"+self._node)
- class NodeRetype(object):
- def __init__(self):
- self._node = ""
- self._new_type = ""
- def execute(self, model, node, new_type, local):
- """
- Retype the node in model to new_type.
- If local is true, the change only affects the single node.
- If local is false, the change affects all nodes in all models.
- """
- self._node = node
- self._new_type = new_type
- if local:
- mv.transformation_execute_MANUAL("graph_ops/retype_node", {"gm":model}, {"gm":model},
- callback=self._callback)
- else:
- node_type = get_node_type(model, node)
- for m in all_models():
- for node in all_nodes_with_type(m, node_type):
- self.execute(m, node, new_type, local=True)
- def _callback(self, model):
- mv.attr_assign(model, "gm/"+self._node, "typeID", self._new_type)
|