You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

node_map.py 2.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Wed Apr 22 11:31:26 2020
  5. @author: ljia
  6. """
  7. import numpy as np
  8. class NodeMap(object):
  9. def __init__(self, num_nodes_g, num_nodes_h):
  10. self.__forward_map = [np.inf] * num_nodes_g
  11. self.__backward_map = [np.inf] * num_nodes_h
  12. self.__induced_cost = np.inf
  13. def num_source_nodes(self):
  14. return len(self.__forward_map)
  15. def num_target_nodes(self):
  16. return len(self.__backward_map)
  17. def image(self, node):
  18. if node < len(self.__forward_map):
  19. return self.__forward_map[node]
  20. else:
  21. raise Exception('The node with ID ', str(node), ' is not contained in the source nodes of the node map.')
  22. return np.inf
  23. def pre_image(self, node):
  24. if node < len(self.__backward_map):
  25. return self.__backward_map[node]
  26. else:
  27. raise Exception('The node with ID ', str(node), ' is not contained in the target nodes of the node map.')
  28. return np.inf
  29. def as_relation(self, relation):
  30. relation.clear()
  31. for i in range(0, len(self.__forward_map)):
  32. k = self.__forward_map[i]
  33. if k != np.inf:
  34. relation.append(tuple((i, k)))
  35. for k in range(0, len(self.__backward_map)):
  36. i = self.__backward_map[k]
  37. if i == np.inf:
  38. relation.append(tuple((i, k)))
  39. def add_assignment(self, i, k):
  40. if i != np.inf:
  41. if i < len(self.__forward_map):
  42. self.__forward_map[i] = k
  43. else:
  44. raise Exception('The node with ID ', str(i), ' is not contained in the source nodes of the node map.')
  45. if k != np.inf:
  46. if k < len(self.__backward_map):
  47. self.__backward_map[k] = i
  48. else:
  49. raise Exception('The node with ID ', str(k), ' is not contained in the target nodes of the node map.')
  50. def set_induced_cost(self, induced_cost):
  51. self.__induced_cost = induced_cost
  52. def induced_cost(self):
  53. return self.__induced_cost
  54. @property
  55. def forward_map(self):
  56. return self.__forward_map
  57. @forward_map.setter
  58. def forward_map(self, value):
  59. self.__forward_map = value
  60. @property
  61. def backward_map(self):
  62. return self.__backward_map
  63. @backward_map.setter
  64. def backward_map(self, value):
  65. self.__backward_map = value

A Python package for graph kernels, graph edit distances and graph pre-image problem.