| @@ -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 | |||