docs: def merge(self, subordinate_graph):
          """
          merge rules:
          00 + 00 == 00    00 + 0B == 0B
          0A + 00 == 0A    0A + 0B == 0A
          A0 + 00 == A0    A0 + 0B == AB
          AA + 00 == AA    AA + 0B == AB
  
          00 + B0 == B0    00 + BB == BB
          0A + B0 == BA    0A + BB == BA
          A0 + B0 == A0    A0 + BB == AB
          AA + B0 == AA    AA + BB == AA
          """
          if not isinstance(subordinate_graph, Graph):
              raise Exception("Graph is expected to only merge with a Graph.")
  
          subordinate_nodes = subordinate_graph.get_nodes()
  
          merge_results = []
          for node_id in subordinate_nodes:
              node = subordinate_nodes[node_id]
              merge_results.append((
                  node.get_id(),
                  self.insert_node(node)
              ))
  
          # TODO perhaps throw exception if merge was unsuccessful
          return merge_results