Я написал свой собственный синтаксический анализатор графа 6 на основе советов в сообщении SO.
NetworkX реализует его аналогичным образом. Тем не менее, оба читают формат Graph6 последовательно (если только Python каким-то образом не векторизует циклы, в чем я сомневаюсь).
Декодирование (Di)Graph6 по сути делает следующее:
- Создает вектор-строку v на основе значений char
- (Условно) вычитает -63 (может быть векторизован)
- Распакуйте байты в биты (предпочтительно в группы по шесть штук)
- Используйте битовый вектор, чтобы добавить значение ребра [i,j] в массив A numpy.
Код: Выделить всё
@classmethod
def from_graph6(cls, text: str = None, path=""):
"""
Read graph6.
Yes, it imports a whole file to memory.
"""
if path:
# read from file
raise NotImplementedError
elif text:
# TODO: strip header
# if data.startswith(">>graph6