| @@ -0,0 +1,102 @@ | |||||
| #!/usr/bin/env python3 | |||||
| # -*- coding: utf-8 -*- | |||||
| """ | |||||
| Created on Wed Apr 22 11:31:26 2020 | |||||
| @author: ljia | |||||
| """ | |||||
| import numpy as np | |||||
| from gklearn.utils import dummy_node, undefined_node | |||||
| class NodeMap(object): | |||||
| def __init__(self, num_nodes_g, num_nodes_h): | |||||
| self.__forward_map = [undefined_node()] * num_nodes_g | |||||
| self.__backward_map = [undefined_node()] * num_nodes_h | |||||
| self.__induced_cost = np.inf | |||||
| def clear(self): | |||||
| """ | |||||
| /*! | |||||
| * @brief Clears the node map. | |||||
| */ | |||||
| """ | |||||
| self.__forward_map = [undefined_node() for i in range(len(self.__forward_map))] | |||||
| self.__backward_map = [undefined_node() for i in range(len(self.__backward_map))] | |||||
| def num_source_nodes(self): | |||||
| return len(self.__forward_map) | |||||
| def num_target_nodes(self): | |||||
| return len(self.__backward_map) | |||||
| def image(self, node): | |||||
| if node < len(self.__forward_map): | |||||
| return self.__forward_map[node] | |||||
| else: | |||||
| raise Exception('The node with ID ', str(node), ' is not contained in the source nodes of the node map.') | |||||
| return undefined_node() | |||||
| def pre_image(self, node): | |||||
| if node < len(self.__backward_map): | |||||
| return self.__backward_map[node] | |||||
| else: | |||||
| raise Exception('The node with ID ', str(node), ' is not contained in the target nodes of the node map.') | |||||
| return undefined_node() | |||||
| def as_relation(self, relation): | |||||
| relation.clear() | |||||
| for i in range(0, len(self.__forward_map)): | |||||
| k = self.__forward_map[i] | |||||
| if k != undefined_node(): | |||||
| relation.append(tuple((i, k))) | |||||
| for k in range(0, len(self.__backward_map)): | |||||
| i = self.__backward_map[k] | |||||
| if i == dummy_node(): | |||||
| relation.append(tuple((i, k))) | |||||
| def add_assignment(self, i, k): | |||||
| if i != dummy_node(): | |||||
| if i < len(self.__forward_map): | |||||
| self.__forward_map[i] = k | |||||
| else: | |||||
| raise Exception('The node with ID ', str(i), ' is not contained in the source nodes of the node map.') | |||||
| if k != dummy_node(): | |||||
| if k < len(self.__backward_map): | |||||
| self.__backward_map[k] = i | |||||
| else: | |||||
| raise Exception('The node with ID ', str(k), ' is not contained in the target nodes of the node map.') | |||||
| def set_induced_cost(self, induced_cost): | |||||
| self.__induced_cost = induced_cost | |||||
| def induced_cost(self): | |||||
| return self.__induced_cost | |||||
| @property | |||||
| def forward_map(self): | |||||
| return self.__forward_map | |||||
| @forward_map.setter | |||||
| def forward_map(self, value): | |||||
| self.__forward_map = value | |||||
| @property | |||||
| def backward_map(self): | |||||
| return self.__backward_map | |||||
| @backward_map.setter | |||||
| def backward_map(self, value): | |||||
| self.__backward_map = value | |||||