from typing import Optional, Union
from ...classes.types import is_static_graph, is_temporal_graph
from ...typing import StaticGraph, TemporalGraph
[docs]
def to_dynetx(G: Union[StaticGraph, TemporalGraph, list], attr: Optional[str] = None, **kwargs):
""" Convert from NetworkX to `DyNetX <https://dynetx.readthedocs.io/>`__.
:param object G: Graph object. Accepts a :class:`~networkx_temporal.classes.TemporalGraph`, a
single static NetworkX graph, or a list of static NetworkX graphs as input.
:param attr: Attribute name for the temporal edges. Optional.
:param kwargs: Keyword arguments for the DyNetX graph object.
:rtype: dynetx.DynGraph
"""
import dynetx as dn
if attr is not None and type(attr) != str:
raise TypeError("Attribute name must be a string.")
if not (is_temporal_graph(G) or is_static_graph(G)):
raise TypeError("Input must be a temporal or static NetworkX graph.")
dnG = getattr(dn, f"Dyn{'Di' if G.is_directed() else ''}Graph")(**kwargs)
if is_static_graph(G):
G = [G]
for i, H in enumerate(G):
for u, v, t in H.edges(data=attr, default=i):
dnG.add_interaction(u, v, t=t if attr is not None else i)
return dnG