Есть ли способ иметь краевые атрибуты в качестве заполнителей в иерархии реграфа? - PullRequest
0 голосов
/ 08 января 2019

Я работаю над скриптом Python, использующим библиотеку regraph на основе networkx. Я создал иерархию, которая содержит различные графики, которые напечатаны друг за другом. На одном из графиков я хочу, чтобы у ребер были атрибуты, например, имя. Когда я делаю это, я получаю сообщение о том, что гомоморфизм нарушен, потому что граф, к которому он типизирован, не имеет точно таких же атрибутов ребер.

Я знаю, что это может быть не то, для чего предназначен regraph, но есть ли способ указать атрибут ребра в графе в иерархии ИЛИ правило, которое учитывает не только шаблоны, но и имена узлов?

Я уже пытался добавить пустые атрибуты для других графиков в иерархии, это не работает.

hierarchy = rg.NetworkXHierarchy()

g_type = nx.DiGraph()
g_type.add_nodes_from(['list', 'number'])
g_type.add_edges_from([('list', 'number')])

g_obj = nx.DiGraph()
g_obj.add_nodes_from(['A', 'a'])
rg.add_edge(g_obj, 'A', 'a', attrs={'name': 'input'})

hierarchy.add_graph('type', g_type)
hierarchy.add_graph('obj', g_obj)

hierarchy.add_typing('obj', 'type', {'A': 'list', 'a': 'number'})

Я хочу, чтобы край графа имел имя атрибута, но это вызывает ошибку гомоморфизма.

1 Ответ

0 голосов
/ 15 января 2019

Для тех, кому интересно, вот как мне удалось решить проблему:

hierarchy = rg.NetworkXHierarchy()

g_type = nx.DiGraph()
g_type.add_nodes_from(['list', 'number'])
g_type.add_edges_from([('list', 'number')])
rg.add_edge_attr(g_type, 'list', 'number', attrs={'name': rg.UniversalSet()})

g_obj = nx.DiGraph()
g_obj.add_nodes_from(['A', 'a'])
rg.add_edge(g_obj, 'A', 'a', attrs={'name': 'input'})

hierarchy.add_graph('type', g_type)
hierarchy.add_graph('obj', g_obj)

hierarchy.add_typing('obj', 'type', {'A': 'list', 'a': 'number'})

Вам просто нужно добавить тот же атрибут с rg.UniversalSet в качестве значения.

...