Сжимающиеся узлы с самоконтролями в сети x

Я заметил несоответствие в поведении networkx.contracted_nodes(G,u,v), Ожидается, что функция будет сжимать (объединять) узлы u а также v на графике Gчто он делает - до тех пор, пока ни u ни v иметь край петли Если имеется цикл, функция удаляет цикл без объединения узлов. Пример:

G = nx.Graph([(1,1), (1,2), (2,2)]) # Two nodes
H = nx.contracted_nodes(G, 1, 2, self_loops=False)
H.edges() # Should be one node now

Выход:

[(1, 1), (1, 2)] # Nope, same two nodes, but only one edge

Это ошибка, неопределенное поведение или недокументированная функция?

Текущая документация

1 ответ

Решение

Это похоже на ошибку для меня. FWIW, это происходит даже без (1,1) края в G, В исходном коде для ненаправленного графа

new_edges = ((u, w, d) for x, w, d in G.edges(v, data=True)
                 if self_loops or w != u)

В твоем случае u является 1 а также w является 2, Он проходит по всем краям формы (v,w,d) с x всегда равно v, w другой узел на краю и d это данные для ребра (в вашем случае ничего).

Когда дело доходит до (2,2) край, это добавляет грань между u который 1 а также w который 2, Это вызывает 2 быть узлом в новом графе.

Так что нужно разобраться с делом w == v лучше.

Я добавил отчет об ошибке.


РЕДАКТИРОВАТЬ Похоже, эта ошибка будет исправлена ​​в следующем выпуске, который скоро будет.

Другие вопросы по тегам