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.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. from gklearn.utils import dummy_node, undefined_node
  9. class NodeMap(object):
  10. def __init__(self, num_nodes_g, num_nodes_h):
  11. self._forward_map = [undefined_node()] * num_nodes_g
  12. self._backward_map = [undefined_node()] * num_nodes_h
  13. self._induced_cost = np.inf
  14. def clear(self):
  15. """
  16. /*!
  17. * @brief Clears the node map.
  18. */
  19. """
  20. self._forward_map = [undefined_node() for i in range(len(self._forward_map))]
  21. self._backward_map = [undefined_node() for i in range(len(self._backward_map))]
  22. def num_source_nodes(self):
  23. return len(self._forward_map)
  24. def num_target_nodes(self):
  25. return len(self._backward_map)
  26. def image(self, node):
  27. if node < len(self._forward_map):
  28. return self._forward_map[node]
  29. else:
  30. raise Exception('The node with ID ', str(node), ' is not contained in the source nodes of the node map.')
  31. return undefined_node()
  32. def pre_image(self, node):
  33. if node < len(self._backward_map):
  34. return self._backward_map[node]
  35. else:
  36. raise Exception('The node with ID ', str(node), ' is not contained in the target nodes of the node map.')
  37. return undefined_node()
  38. def as_relation(self, relation):
  39. relation.clear()
  40. for i in range(0, len(self._forward_map)):
  41. k = self._forward_map[i]
  42. if k != undefined_node():
  43. relation.append(tuple((i, k)))
  44. for k in range(0, len(self._backward_map)):
  45. i = self._backward_map[k]
  46. if i == dummy_node():
  47. relation.append(tuple((i, k)))
  48. def add_assignment(self, i, k):
  49. if i != dummy_node():
  50. if i < len(self._forward_map):
  51. self._forward_map[i] = k
  52. else:
  53. raise Exception('The node with ID ', str(i), ' is not contained in the source nodes of the node map.')
  54. if k != dummy_node():
  55. if k < len(self._backward_map):
  56. self._backward_map[k] = i
  57. else:
  58. raise Exception('The node with ID ', str(k), ' is not contained in the target nodes of the node map.')
  59. def set_induced_cost(self, induced_cost):
  60. self._induced_cost = induced_cost
  61. def induced_cost(self):
  62. return self._induced_cost
  63. @property
  64. def forward_map(self):
  65. return self._forward_map
  66. @forward_map.setter
  67. def forward_map(self, value):
  68. self._forward_map = value
  69. @property
  70. def backward_map(self):
  71. return self._backward_map
  72. @backward_map.setter
  73. def backward_map(self, value):
  74. self._backward_map = value

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