okay I can test it a bit more

This commit is contained in:
Audrey 2022-10-23 02:10:31 -07:00
parent 2f6e2035f5
commit 2862270776
2 changed files with 14 additions and 4 deletions

View File

@ -101,8 +101,8 @@ class HierarchicalGraph(RelativeAtomGraph):
# if item is a group, all edges will have two sides
# if item is an atom, all edges will have one side
if isinstance(item, RelativeAtom):
yield from ((None, (item, succ, key)) for succ in self.__graph.succ[item] for key in succ)
yield from (((pred, item, key), None) for pred in self.__graph.pred[item] for key in pred)
yield from ((None, (item, succ, key)) for succ, keys in self.__graph.succ[item].items() for key in keys)
yield from (((pred, item, key), None) for pred, keys in self.__graph.pred[item].items() for key in keys)
else:
yield from ((self.__graph.edges[(item, succ, key)]['prev'], (item, succ, key)) for succ in self.__graph.succ[item] for key in succ)
@ -274,6 +274,14 @@ class HierarchicalGraph(RelativeAtomGraph):
self.move_node_in(node, moveto)
self.move_node_in(node, new_parent)
def create_group(self, nodes: List[RelativeAtomOrGroup], parent: RelativeAtomGroup) -> RelativeAtomGroup:
if any(self._parent(node) is not parent for node in nodes):
raise ValueError("Not a child of parent")
group = self._add_group(parent)
for node in nodes:
self.move_node_in(node, group)
return group
def _parent(self, item: RelativeAtomOrGroup) -> RelativeAtomGroup:
result = item.parent if isinstance(item, RelativeAtomGroup) else self._atom_parents[item]
if result is None:

View File

@ -112,9 +112,11 @@ class RelativeAtomGraph:
relsucc = RelativeAtom(atom=succ, callstack=callstack)
res = self._add_node(relsucc, path)
if is_pred:
self._add_edge(relsucc, relatom)
if not self.__graph.has_edge(relsucc, relatom):
self._add_edge(relsucc, relatom)
else:
self._add_edge(relatom, relsucc)
if not self.__graph.has_edge(relsucc, relatom):
self._add_edge(relsucc, relatom)
return relsucc if res else None
@staticmethod