Graphs manipulation

In aGrUM, graphs are undirected (using edges), directed (using arcs) or mixed (using both arcs and edges). Some other types of graphs are described below. Edges and arcs are represented by pairs of int (nodeId), but these pairs are considered as unordered for edges whereas they are ordered for arcs.

For all types of graphs, nodes are int. If a graph of objects is needed (like pyAgrum.BayesNet), the objects are mapped to nodeIds.

Edges and Arcs

Arc

class pyAgrum.Arc(*args)

pyAgrum.Arc is the representation of an arc between two nodes represented by int : the head and the tail.

Arc(tail, head) -> Arc
Parameters:
  • tail (int) – the tail
  • head (int) – the head
Arc(src) -> Arc
Parameters:
  • src (Arc) – the gum.Arc to copy
first(Arc self)
Returns:the nodeId of the first node of the arc (the tail)
Return type:int
head(Arc self)
Returns:the id of the head node
Return type:int
other(Arc self, int id)
Parameters:id (int) – the nodeId of the head or the tail
Returns:the nodeId of the other node
Return type:int
second(Arc self)
Returns:the nodeId of the second node of the arc (the head)
Return type:int
tail(Arc self)
Returns:the id of the tail node
Return type:int

Edge

class pyAgrum.Edge(*args)

pyAgrum.Edge is the representation of an arc between two nodes represented by int : the first and the second.

Edge(aN1,aN2) -> Edge
Parameters:
  • aN1 (int) – the nodeId of the first node
  • aN2 (int) – the nodeId of the secondnode
Edge(src) -> Edge
Parameters:
  • src (yAgrum.Edge) – the Edge to copy
first(Edge self)
Returns:the nodeId of the first node of the arc (the tail)
Return type:int
other(Edge self, int id)
Parameters:id (int) – the nodeId of one of the nodes of the Edge
Returns:the nodeId of the other node
Return type:int
second(Edge self)
Returns:the nodeId of the second node of the arc (the head)
Return type:int

Directed Graphs

Digraph

class pyAgrum.DiGraph(*args)

DiGraph represents a Directed Graph.

DiGraph() -> DiGraph
default constructor
DiGraph(src) -> DiGraph
Parameters:
  • src (pyAgrum.DiGraph) – the digraph to copy
addArc(DiGraph self, int tail, int head)

addArc(DiGraph self, int n1, int n2)

Add an arc from tail to head.

Parameters:
  • tail (int) – the id of the tail node
  • head (int) – the id of the head node
Raises:

gum.InvalidNode – If head or tail does not belong to the graph nodes.

addNode(DiGraph self)
Returns:the new NodeId
Return type:int
addNodeWithId(DiGraph self, int id)

Add a node by choosing a new NodeId.

Parameters:id (int) – The id of the new node
Raises:gum.DuplicateElement – If the given id is already used
addNodes(DiGraph self, int n)

Add n nodes.

Parameters:n (int) – the number of nodes to add.
Returns:the new ids
Return type:Set of int
arcs(DiGraph self)
Returns:the list of the arcs
Return type:List
children(DiGraph self, int id)
Parameters:id (int) – the id of the parent
Returns:the set of all the children
Return type:Set
clear(DiGraph self)

Remove all the nodes and arcs from the graph.

connectedComponents()

connected components from a graph/BN

Compute the connected components of a pyAgrum’s graph or Bayesian Network (more generally an object that has nodes, children/parents or neighbours methods)

The firstly visited node for each component is called a ‘root’ and is used as a key for the component. This root has been arbitrarily chosen during the algorithm.

Returns:dict of connected components (as set of nodeIds (int)) with a nodeId (root) of each component as key.
Return type:dict(int,Set[int])
empty(DiGraph self)

Check if the graph is empty.

Returns:True if the graph is empty
Return type:bool
emptyArcs(DiGraph self)

Check if the graph doesn’t contains arcs.

Returns:True if the graph doesn’t contains arcs
Return type:bool
eraseArc(DiGraph self, int n1, int n2)

Erase the arc between n1 and n2.

Parameters:
  • n1 (int) – the id of the tail node
  • n2 (int) – the id of the head node
eraseChildren(DiGraph self, int n)

Erase the arcs heading through the node’s children.

Parameters:n (int) – the id of the parent node
eraseNode(DiGraph self, int id)

Erase the node and all the related arcs.

Parameters:id (int) – the id of the node
eraseParents(DiGraph self, int n)

Erase the arcs coming to the node.

Parameters:n (int) – the id of the child node
existsArc(DiGraph self, int n1, int n2)

Check if an arc exists bewteen n1 and n2.

Parameters:
  • n1 (int) – the id of the tail node
  • n2 (int) – the id of the head node
Returns:

True if the arc exists

Return type:

bool

existsNode(DiGraph self, int id)

Check if a node with a certain id exists in the graph.

Parameters:id (int) – the checked id
Returns:True if the node exists
Return type:bool
hasDirectedPath(DiGraph self, int _from, int to)

Check if a directedpath exists bewteen from and to.

Parameters:
  • from (int) – the id of the first node of the (possible) path
  • to (int) – the id of the last node of the (possible) path
Returns:

True if the directed path exists

Return type:

bool

nodes(DiGraph self)
Returns:the set of ids
Return type:set
parents(DiGraph self, int id)
Parameters:id – The id of the child node
Returns:the set of the parents ids.
Return type:Set
size(DiGraph self)
Returns:the number of nodes in the graph
Return type:int
sizeArcs(DiGraph self)
Returns:the number of arcs in the graph
Return type:int
toDot(DiGraph self)
Returns:a friendly display of the graph in DOT format
Return type:str
topologicalOrder(DiGraph self, bool clear=True)
Returns:the list of the nodes Ids in a topological order
Return type:List
Raises:gum.InvalidDirectedCycle – If this graph contains cycles

Directed Acyclic Graph

class pyAgrum.DAG(*args)

DAG represents a Directed Acyclic Graph.

DAG() -> DAG
default constructor
DAG(src) -> DAG
Parameters:
  • src (DAG) – the DAG to copy
addArc(DAG self, int tail, int head)

addArc(DAG self, int n1, int n2)

Add an arc from tail to head.

Parameters:
  • tail (int) – the id of the tail node
  • head (int) – the id of the head node
Raises:
  • gum.InvalidDirectedCircle – If any (directed) cycle is created by this arc
  • gum.InvalidNode – If head or tail does not belong to the graph nodes
addNode(DiGraph self)
Returns:the new NodeId
Return type:int
addNodeWithId(DiGraph self, int id)

Add a node by choosing a new NodeId.

Parameters:id (int) – The id of the new node
Raises:gum.DuplicateElement – If the given id is already used
addNodes(DiGraph self, int n)

Add n nodes.

Parameters:n (int) – the number of nodes to add.
Returns:the new ids
Return type:Set of int
ancestors(DAG self, int id)
arcs(DiGraph self)
Returns:the list of the arcs
Return type:List
children(DiGraph self, int id)
Parameters:id (int) – the id of the parent
Returns:the set of all the children
Return type:Set
clear(DiGraph self)

Remove all the nodes and arcs from the graph.

connectedComponents()

connected components from a graph/BN

Compute the connected components of a pyAgrum’s graph or Bayesian Network (more generally an object that has nodes, children/parents or neighbours methods)

The firstly visited node for each component is called a ‘root’ and is used as a key for the component. This root has been arbitrarily chosen during the algorithm.

Returns:dict of connected components (as set of nodeIds (int)) with a nodeId (root) of each component as key.
Return type:dict(int,Set[int])
descendants(DAG self, int id)
empty(DiGraph self)

Check if the graph is empty.

Returns:True if the graph is empty
Return type:bool
emptyArcs(DAG self)
eraseArc(DAG self, int n1, int n2)
eraseChildren(DAG self, int n)
eraseNode(DiGraph self, int id)

Erase the node and all the related arcs.

Parameters:id (int) – the id of the node
eraseParents(DAG self, int n)
existsArc(DAG self, int n1, int n2)
existsNode(DiGraph self, int id)

Check if a node with a certain id exists in the graph.

Parameters:id (int) – the checked id
Returns:True if the node exists
Return type:bool
hasDirectedPath(DiGraph self, int _from, int to)

Check if a directedpath exists bewteen from and to.

Parameters:
  • from (int) – the id of the first node of the (possible) path
  • to (int) – the id of the last node of the (possible) path
Returns:

True if the directed path exists

Return type:

bool

isIndependent(DAG self, int X, int Y, Set Z)

isIndependent(DAG self, Set X, Set Y, Set Z) -> bool

moralGraph(DAG self)
moralizedAncestralGraph(DAG self, Set nodes)
nodes(DiGraph self)
Returns:the set of ids
Return type:set
parents(DiGraph self, int id)
Parameters:id – The id of the child node
Returns:the set of the parents ids.
Return type:Set
size(DiGraph self)
Returns:the number of nodes in the graph
Return type:int
sizeArcs(DAG self)
toDot(DiGraph self)
Returns:a friendly display of the graph in DOT format
Return type:str
topologicalOrder(DiGraph self, bool clear=True)
Returns:the list of the nodes Ids in a topological order
Return type:List
Raises:gum.InvalidDirectedCycle – If this graph contains cycles

Undirected Graphs

UndiGraph

class pyAgrum.UndiGraph(*args)

UndiGraph represents an Undirected Graph.

UndiGraph() -> UndiGraph
default constructor
UndiGraph(src) -> UndiGraph
Parameters!
  • src (UndiGraph) – the pyAgrum.UndiGraph to copy
addEdge(UndiGraph self, int first, int second)

addEdge(UndiGraph self, int n1, int n2)

Insert a new edge into the graph.

Parameters:
  • n1 (int) – the id of one node of the new inserted edge
  • n2 (int) – the id of the other node of the new inserted edge
Raises:

gum.InvalidNode – If n1 or n2 does not belong to the graph nodes.

addNode(UndiGraph self)
Returns:the new NodeId
Return type:int
addNodeWithId(UndiGraph self, int id)

Add a node by choosing a new NodeId.

Parameters:id (int) – The id of the new node
Raises:gum.DuplicateElement – If the given id is already used
addNodes(UndiGraph self, int n)

Add n nodes.

Parameters:n (int) – the number of nodes to add.
Returns:the new ids
Return type:Set of int
clear(UndiGraph self)

Remove all the nodes and edges from the graph.

connectedComponents()

connected components from a graph/BN

Compute the connected components of a pyAgrum’s graph or Bayesian Network (more generally an object that has nodes, children/parents or neighbours methods)

The firstly visited node for each component is called a ‘root’ and is used as a key for the component. This root has been arbitrarily chosen during the algorithm.

Returns:dict of connected components (as set of nodeIds (int)) with a nodeId (root) of each component as key.
Return type:dict(int,Set[int])
edges(UndiGraph self)
Returns:the list of the edges
Return type:List
empty(UndiGraph self)

Check if the graph is empty.

Returns:True if the graph is empty
Return type:bool
emptyEdges(UndiGraph self)

Check if the graph doesn’t contains edges.

Returns:True if the graph doesn’t contains edges
Return type:bool
eraseEdge(UndiGraph self, int n1, int n2)

Erase the edge between n1 and n2.

Parameters:
  • n1 (int) – the id of the tail node
  • n2 (int) – the id of the head node
eraseNeighbours(UndiGraph self, int n)

Erase all the edges adjacent to a given node.

Parameters:n (int) – the id of the node
eraseNode(UndiGraph self, int id)

Erase the node and all the adjacent edges.

Parameters:id (int) – the id of the node
existsEdge(UndiGraph self, int n1, int n2)

Check if an edge exists bewteen n1 and n2.

Parameters:
  • n1 (int) – the id of one extremity of the edge
  • n2 (int) – the id of the other extremity if tge edge
Returns:

True if the arc exists

Return type:

bool

existsNode(UndiGraph self, int id)

Check if a node with a certain id exists in the graph.

Parameters:id (int) – the checked id
Returns:True if the node exists
Return type:bool
hasUndirectedCycle(UndiGraph self)

Checks whether the graph contains cycles.

Returns:True if the graph contains a cycle
Return type:bool
neighbours(UndiGraph self, int id)
Parameters:id (int) – the id of the checked node
Returns:The set of edges adjacent to the given node
Return type:Set
nodes(UndiGraph self)
Returns:the set of ids
Return type:set
nodes2ConnectedComponent(UndiGraph self)
partialUndiGraph(UndiGraph self, Set nodes)
Parameters:nodesSet (Set) – The set of nodes composing the partial graph
Returns:The partial graph formed by the nodes given in parameter
Return type:pyAgrum.UndiGraph
size(UndiGraph self)
Returns:the number of nodes in the graph
Return type:int
sizeEdges(UndiGraph self)
Returns:the number of edges in the graph
Return type:int
toDot(UndiGraph self)
Returns:a friendly display of the graph in DOT format
Return type:str

Clique Graph

class pyAgrum.CliqueGraph(*args)

CliqueGraph represents a Clique Graph.

CliqueGraph() -> CliqueGraph
default constructor
CliqueGraph(src) -> CliqueGraph
Parameter
  • src (pyAgrum.CliqueGraph) – the CliqueGraph to copy
addEdge(CliqueGraph self, int first, int second)

Insert a new edge into the graph.

Parameters:
  • n1 (int) – the id of one node of the new inserted edge
  • n2 (int) – the id of the other node of the new inserted edge
Raises:

gum.InvalidNode – If n1 or n2 does not belong to the graph nodes.

addNode(CliqueGraph self, Set clique)

addNode(CliqueGraph self) -> int addNode(CliqueGraph self, int id, Set clique) addNode(CliqueGraph self, int id)

Returns:the new NodeId
Return type:int
addNodeWithId(UndiGraph self, int id)

Add a node by choosing a new NodeId.

Parameters:id (int) – The id of the new node
Raises:gum.DuplicateElement – If the given id is already used
addNodes(UndiGraph self, int n)

Add n nodes.

Parameters:n (int) – the number of nodes to add.
Returns:the new ids
Return type:Set of int
addToClique(CliqueGraph self, int clique_id, int node_id)

Change the set of nodes included into a given clique and returns the new set

Parameters:
  • clique_id (int) – the id of the clique
  • node_id (int) – the id of the node
Raises:
  • gum.NotFound – If clique_id does not exist
  • gum.DuplicateElement – If clique_id set already contains the ndoe
clear(CliqueGraph self)

Remove all the nodes and edges from the graph.

clearEdges(CliqueGraph self)

Remove all edges and their separators

clique(CliqueGraph self, int clique)
Parameters:idClique (int) – the id of the clique
Returns:The set of nodes included in the clique
Return type:Set
Raises:gum.NotFound – If the clique does not belong to the clique graph
connectedComponents()

connected components from a graph/BN

Compute the connected components of a pyAgrum’s graph or Bayesian Network (more generally an object that has nodes, children/parents or neighbours methods)

The firstly visited node for each component is called a ‘root’ and is used as a key for the component. This root has been arbitrarily chosen during the algorithm.

Returns:dict of connected components (as set of nodeIds (int)) with a nodeId (root) of each component as key.
Return type:dict(int,Set[int])
container(CliqueGraph self, int idNode)
Parameters:idNode (int) – the id of the node
Returns:the id of a clique containing the node
Return type:int
Raises:gum.NotFound – If no clique contains idNode
containerPath(CliqueGraph self, int node1, int node2)
Parameters:
  • node1 (int) – the id of one node
  • node2 (int) – the id of the other node
Returns:

a path from a clique containing node1 to a clique containing node2

Return type:

List

Raises:

gum.NotFound – If such path cannot be found

edges(UndiGraph self)
Returns:the list of the edges
Return type:List
empty(UndiGraph self)

Check if the graph is empty.

Returns:True if the graph is empty
Return type:bool
emptyEdges(UndiGraph self)

Check if the graph doesn’t contains edges.

Returns:True if the graph doesn’t contains edges
Return type:bool
eraseEdge(CliqueGraph self, Edge edge)

Erase the edge between n1 and n2.

Parameters:
  • n1 (int) – the id of the tail node
  • n2 (int) – the id of the head node
eraseFromClique(CliqueGraph self, int clique_id, int node_id)

Remove a node from a clique

Parameters:
  • clique_id (int) – the id of the clique
  • node_id (int) – the id of the node
Raises:

gum.NotFound – If clique_id does not exist

eraseNeighbours(UndiGraph self, int n)

Erase all the edges adjacent to a given node.

Parameters:n (int) – the id of the node
eraseNode(CliqueGraph self, int node)

Erase the node and all the adjacent edges.

Parameters:id (int) – the id of the node
existsEdge(UndiGraph self, int n1, int n2)

Check if an edge exists bewteen n1 and n2.

Parameters:
  • n1 (int) – the id of one extremity of the edge
  • n2 (int) – the id of the other extremity if tge edge
Returns:

True if the arc exists

Return type:

bool

existsNode(UndiGraph self, int id)

Check if a node with a certain id exists in the graph.

Parameters:id (int) – the checked id
Returns:True if the node exists
Return type:bool
hasRunningIntersection(CliqueGraph self)
Returns:True if the running intersection property holds
Return type:bool
hasUndirectedCycle(UndiGraph self)

Checks whether the graph contains cycles.

Returns:True if the graph contains a cycle
Return type:bool
isJoinTree(CliqueGraph self)
Returns:True if the graph is a join tree
Return type:bool
neighbours(UndiGraph self, int id)
Parameters:id (int) – the id of the checked node
Returns:The set of edges adjacent to the given node
Return type:Set
nodes(UndiGraph self)
Returns:the set of ids
Return type:set
nodes2ConnectedComponent(UndiGraph self)
partialUndiGraph(UndiGraph self, Set nodes)
Parameters:nodesSet (Set) – The set of nodes composing the partial graph
Returns:The partial graph formed by the nodes given in parameter
Return type:pyAgrum.UndiGraph
separator(CliqueGraph self, int cliq1, int cliq2)
Parameters:
  • edge (pyAgrum.Edge) – the edge to be checked
  • clique1 (int) – one extremity of the edge
  • clique (int) – the other extremity of the edge
Returns:

the separator included in a given edge

Return type:

Set

Raises:

gum.NotFound – If the edge does not belong to the clique graph

setClique(CliqueGraph self, int idClique, Set new_clique)

changes the set of nodes included into a given clique

Parameters:
  • idClique (int) – the id of the clique
  • new_clique (Set) – the new set of nodes to be included in the clique
Raises:

gum.NotFound – If idClique is not a clique of the graph

size(UndiGraph self)
Returns:the number of nodes in the graph
Return type:int
sizeEdges(UndiGraph self)
Returns:the number of edges in the graph
Return type:int
toDot(CliqueGraph self)
Returns:a friendly display of the graph in DOT format
Return type:str
toDotWithNames(bn)
Parameters:
Returns:

a friendly display of the graph in DOT format where ids have been changed according to their correspondance in the BN

Return type:

str

Mixed Graph

class pyAgrum.MixedGraph(*args)

MixedGraph represents a graph with both arcs and edges.

MixedGraph() -> MixedGraph
default constructor
MixedGraph(src) -> MixedGraph
Parameters:
  • src (pyAgrum.MixedGraph) –the MixedGraph to copy
addArc(MixedGraph self, int n1, int n2)

Add an arc from tail to head.

Parameters:
  • tail (int) – the id of the tail node
  • head (int) – the id of the head node
Raises:

gum.InvalidNode – If head or tail does not belong to the graph nodes.

addEdge(MixedGraph self, int n1, int n2)

Insert a new edge into the graph.

Parameters:
  • n1 (int) – the id of one node of the new inserted edge
  • n2 (int) – the id of the other node of the new inserted edge
Raises:

gum.InvalidNode – If n1 or n2 does not belong to the graph nodes.

addNode(MixedGraph self)
Returns:the new NodeId
Return type:int
addNodeWithId(MixedGraph self, int id)

Add a node by choosing a new NodeId.

Parameters:id (int) – The id of the new node
Raises:gum.DuplicateElement – If the given id is already used
addNodes(MixedGraph self, int n)

Add n nodes.

Parameters:n (int) – the number of nodes to add.
Returns:the new ids
Return type:Set of int
arcs(DiGraph self)
Returns:the list of the arcs
Return type:List
children(DiGraph self, int id)
Parameters:id (int) – the id of the parent
Returns:the set of all the children
Return type:Set
clear(MixedGraph self)

Remove all the nodes and edges from the graph.

connectedComponents()

connected components from a graph/BN

Compute the connected components of a pyAgrum’s graph or Bayesian Network (more generally an object that has nodes, children/parents or neighbours methods)

The firstly visited node for each component is called a ‘root’ and is used as a key for the component. This root has been arbitrarily chosen during the algorithm.

Returns:dict of connected components (as set of nodeIds (int)) with a nodeId (root) of each component as key.
Return type:dict(int,Set[int])
edges(UndiGraph self)
Returns:the list of the edges
Return type:List
empty(MixedGraph self)

Check if the graph is empty.

Returns:True if the graph is empty
Return type:bool
emptyArcs(MixedGraph self)

Check if the graph doesn’t contains arcs.

Returns:True if the graph doesn’t contains arcs
Return type:bool
emptyEdges(MixedGraph self)

Check if the graph doesn’t contains edges.

Returns:True if the graph doesn’t contains edges
Return type:bool
eraseArc(MixedGraph self, int n1, int n2)

Erase the arc between n1 and n2.

Parameters:
  • n1 (int) – the id of the tail node
  • n2 (int) – the id of the head node
eraseChildren(MixedGraph self, int n)

Erase the arcs heading through the node’s children.

Parameters:n (int) – the id of the parent node
eraseEdge(MixedGraph self, int n1, int n2)

Erase the edge between n1 and n2.

Parameters:
  • n1 (int) – the id of the tail node
  • n2 (int) – the id of the head node
eraseNeighbours(MixedGraph self, int n)

Erase all the edges adjacent to a given node.

Parameters:n (int) – the id of the node
eraseNode(MixedGraph self, int id)

Erase the node and all the related arcs and edges.

Parameters:id (int) – the id of the node
eraseParents(MixedGraph self, int n)

Erase the arcs coming to the node.

Parameters:n (int) – the id of the child node
existsArc(MixedGraph self, int n1, int n2)

Check if an arc exists bewteen n1 and n2.

Parameters:
  • n1 (int) – the id of the tail node
  • n2 (int) – the id of the head node
Returns:

True if the arc exists

Return type:

bool

existsEdge(MixedGraph self, int n1, int n2)

Check if an edge exists bewteen n1 and n2.

Parameters:
  • n1 (int) – the id of one extremity of the edge
  • n2 (int) – the id of the other extremity if tge edge
Returns:

True if the arc exists

Return type:

bool

existsNode(MixedGraph self, int id)

Check if a node with a certain id exists in the graph.

Parameters:id (int) – the checked id
Returns:True if the node exists
Return type:bool
hasDirectedPath(DiGraph self, int _from, int to)

Check if a directedpath exists bewteen from and to.

Parameters:
  • from (int) – the id of the first node of the (possible) path
  • to (int) – the id of the last node of the (possible) path
Returns:

True if the directed path exists

Return type:

bool

hasUndirectedCycle(UndiGraph self)

Checks whether the graph contains cycles.

Returns:True if the graph contains a cycle
Return type:bool
mixedOrientedPath(MixedGraph self, int node1, int node2)
Parameters:
  • node1 (int) – the id form which the path begins
  • node2 (int) – the id to witch the path ends
Returns:

a path from node1 to node2, using edges and/or arcs (following the direction of the arcs)

Return type:

List

Raises:

gum.NotFound – If no path can be found between the two nodes

mixedUnorientedPath(MixedGraph self, int node1, int node2)
Parameters:
  • node1 (int) – the id from which the path begins
  • node2 (int) – the id to which the path ends
Returns:

a path from node1 to node2, using edges and/or arcs (not necessarily following the direction of the arcs)

Return type:

List

Raises:

gum.NotFound – If no path can be found between the two nodes

neighbours(UndiGraph self, int id)
Parameters:id (int) – the id of the checked node
Returns:The set of edges adjacent to the given node
Return type:Set
nodes(UndiGraph self)
Returns:the set of ids
Return type:set
nodes2ConnectedComponent(UndiGraph self)
parents(DiGraph self, int id)
Parameters:id – The id of the child node
Returns:the set of the parents ids.
Return type:Set
partialUndiGraph(UndiGraph self, Set nodes)
Parameters:nodesSet (Set) – The set of nodes composing the partial graph
Returns:The partial graph formed by the nodes given in parameter
Return type:pyAgrum.UndiGraph
size(MixedGraph self)
Returns:the number of nodes in the graph
Return type:int
sizeArcs(MixedGraph self)
Returns:the number of arcs in the graph
Return type:int
sizeEdges(MixedGraph self)
Returns:the number of edges in the graph
Return type:int
toDot(MixedGraph self)
Returns:a friendly display of the graph in DOT format
Return type:str
topologicalOrder(DiGraph self, bool clear=True)
Returns:the list of the nodes Ids in a topological order
Return type:List
Raises:gum.InvalidDirectedCycle – If this graph contains cycles