наследование класса от networkx.Graph завершается ошибкой при использовании networkx.union () - PullRequest
0 голосов
/ 07 января 2019

Все

Я пытаюсь наследовать networkx.Graph со своим собственным, добавляя два узла и ребро при создании графа. Но это не с

networkx.exception.NetworkXError: ('The node sets of G and H are not disjoint.', 'Use appropriate rename=(Gprefix,Hprefix)or use disjoint_union(G,H).')

когда я пытаюсь объединить свои графики, вот мой код. Что-нибудь мне не хватает?

#!/usr/bin/python3

import networkx as nx

class die(nx.Graph):
    nLatency = 2
    def __init__(self):
        super().__init__()
        self.addNet()

    def addNet(self):
        self.add_node('N0')
        self.add_node('N1')
        self.add_edge('N0', 'N1', name='nLink', latency=self.nLatency)

S0D0 = die()
S1D0 = die()


Top = nx.union(S0D0, S1D0, rename=('S0D0', 'S1D0'))

1 Ответ

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

Таким образом, здесь происходит то, что networkx пытается создать два временных графика, чьи узлы равны 'S0D0-N0', 'S0D0-N1' для одного и 'S1D0-N1', 'S1D0-N2' для другого. Затем он пытается присоединиться к ним.

Однако, когда вы копаете код, когда он это делает, два новых созданных графика имеют тот же класс, что и оригиналы. Итак, давайте назовем новые созданные графики H1 и H2. Поскольку H1 и H2 также имеют класс die, они инициализируются узлами 'N0' и 'N1', а затем добавляются 'S0D0-N0', 'S0D0-N1' или 'S1D0-N1', 'S1D0-N2'. Так что оба инициализируются с 'N0' и 'N1'.

Итак, на следующем этапе процесса union он проверяет, есть ли у H1 и H2 какие-либо общие узлы, и они это делают. Итак, вы получите ошибку.

Так вот в чем причина ошибки. Как это исправить, вероятно, зависит от того, почему вы инициализируете графики этими узлами, и какой класс вы хотите иметь Top.

Если Top имеет класс die, он должен иметь 'N0' и 'N1' (из-за инициализации), что, как я подозреваю, вам на самом деле не нужно. Если вы просто хотите, чтобы Top был Graph, вы можете сначала превратить S0D0 и S1D0 в Graph s:

Top = nx.union(nx.Graph(S0D0), nx.Graph(S1D0), rename=('S0D0', 'S1D0'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...