Library: graphlib (degree-weighted)

# Graph Library (`graphlib`) — Degree Algorithms (Weighted) Extension

A library extension to `graphlib` containing various neighbor and degree relations for weighted graphs.

## Module: rel:graphlib

View source
``rel:graphlib[G]``

This section of the graph library supports weighted degrees and weighted degree statistics:

AlgorithmDescription
`weighted_degree`The sum of weights connected to a node.
`weighted_indegree`The sum of weights on incoming edges to a node.
`weighted_outdegree`The sum of weights on outgoing edges from a node.
`min_weighted_degree`Smallest weighted degree in the graph.
`max_weighted_degree`Largest weighted degree in the graph.
`average_weighted_degree`Average weighted degree in the graph.
`min_weighted_indegree`Smallest weighted indegree in the graph.
`max_weighted_indegree`Largest weighted indegree in the graph.
`average_weighted_indegree`Average weighted indegree in the graph.
`min_weighted_outdegree`Smallest weighted outdegree in the graph.
`max_weighted_outdegree`Largest weighted outdegree in the graph.
`average_weighted_outdegree`Average weighted outdegree in the graph.
`weighted_degree_statistics`Compute various weighted degree statistics.

### weighted_degree

View source
``weighted_degree(u, d)``

Compute the sum of the weights of each edge connected to a node in a weighted graph.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`u``G:node`A node in `G`.
`d``Int`The weighted degree of `u` in `G`.

Explanation

`weighted_degree` can be used to get the sum of weights connected to a node for each node in `G` or to check whether node `u` has weighted degree `d` in `G`. If `G` is directed, it is the sum of weights on incoming and outgoing edges from a node. If the `degree` of a node that doesn’t exist in `G` is queried, Rel returns the empty relation.

Examples

Compute the `weighted_degree` of nodes in a weighted, directed graph:

``````// Create a directed, weighted graph with three nodes and three edges.
def W = {
(1, 2, 1.0);
(2, 1, -1.0);
(2, 3, 1.0)
}
def G = create_graph[{(:weight, W)}, {(:is_weighted) ; (:is_directed)}]
@inline def mylib = rel:graphlib[G]

// Compute the weighted degree of nodes in G.
def output = mylib:weighted_degree
//output> (1, 0.0)
//        (2, 1.0)
//        (3, 1.0)

// Compute the weighted outdegree of node 1.
def output = mylib:weighted_degree[1]
//output> 0.0``````

### weighted_indegree

View source
``weighted_indegree(u, d)``

Compute the sum of edge weights going into a node in a weighted graph.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`u``G:node`A node in `G`.
`d``Int`The weighted indegree of `u` in `G`.

Explanation

`weighted_indegree` can be used to get the sum of weights coming into each node in `G` or to check whether node `u` has sum of weights `d` coming into it in `G`. If `G` is undirected, it is identical to `weighted_degree`. If the `weighted_indegree` of a node that doesn’t exist in `G` is queried, Rel returns the empty relation.

Examples

Compute the `weighted_indegree` of nodes in a weighted, directed graph:

``````// Create a directed, weighted graph with three nodes and three edges.
def W = {
(1, 2, 1.0);
(2, 1, -1.0);
(2, 3, 1.0)
}
def G = create_graph[{(:weight, W)}, {(:is_weighted) ; (:is_directed)}]
@inline def mylib = rel:graphlib[G]

// Compute the weighted indegree of nodes in G.
def output = mylib:weighted_indegree
//output> (1, -1.0)
//        (2, 1.0)
//        (3, 1.0)

// Compute the weighted indegree of node 1.
def output = mylib:weighted_indegree[1]
//output> 0.0``````

### weighted_outdegree

View source
``weighted_outdegree(u, d)``

Compute the sum of edge weights leaving a node in a weighted graph.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`u``G:node`A node in `G`.
`d``Int`The weighted outdegree of `u` in `G`.

Explanation

`weighted_outdegree` can be used to get the sum of weights on edges leaving each node in `G` or to check whether node `u` has weighted outdegree `d` in `G`. If `G` is undirected, it is identical to `weighted_degree`. If the `outdegree` of a node that doesn’t exist in `G` is queried, Rel returns the empty relation.

Examples

Compute the `weighted_outdegree` of nodes in a weighted, directed graph:

``````def W = {
(1, 2, 1.0);
(2, 1, -1.0);
(2, 3, 1.0)
}
def G = create\_graph\[{(:weight, W)}, {(:is\_weighted) ; (:is\_directed)}]
@inline def mylib = rel:graphlib\[G]

// Compute the weighted outdegree of nodes in G.
def output = mylib:weighted\_outdegree
//output> (1, 1.0)
//        (2, 0.0)
//        (3, 0.0)

// Compute the weighted outdegree of node 1.
def output = mylib:weighted\_outdegree\[1]
//output> 1.0``````

### weighted_degree_sequence

View source
``weighted_degree_sequence(i, d)``

Compute the weighted degree sequence of a weighted graph in decreasing order.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`i``Int`An index.
`d``Int`A weighted degree in `G`.

Explanation

The weighted degree sequence of a graph is the list of the weighted degrees of all the nodes in a graph arranged from highest to lowest. `weighted_degree_sequence` returns index and weighted degree pairs, where index is the position of the corresponding weighted degree in the weighted degree sequence. As an example: `(1, 15.3)` means that degree value `15.3` is the highest degree in this degree sequence.

Examples

``````// Create a directed, weighted graph with three nodes and three edges.
def W = {
(1, 2, 1.0);
(2, 1, -1.0);
(2, 3, 1.0)
}
def G = create_graph[{(:weight, W)}, {(:is_weighted) ; (:is_directed)}]
@inline def mylib = rel:graphlib[G]

// Compute the weighted degree sequence of nodes in G.
def output = mylib:weighted_degree_sequence
//output> (1, 1.0)
//        (2, 1.0)
//        (3, 0.0)

// Compute the highest weighted degree in G.
def output = mylib:weighted_degree_sequence[1]
//output> 1.0``````

### weighted_indegree_sequence

View source
``weighted_indegree_sequence(i, d)``

Compute the weighted indegree sequence of a weighted graph in decreasing order.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`i``Int`An index.
`d``Int`A weighted indegree in `G`.

Explanation

The weighted indegree sequence of a graph is the list of the weighted indegrees of all the nodes in a graph arranged from highest to lowest. `weighted_indegree_sequence` returns index and indegree pairs, where index is the position of the corresponding weighted indegree in the weighted indegree sequence. As an example: `(1, 15.3)` means that indegree value `15.3` is the highest weighted indegree in this weighted indegree sequence.

Examples

``````// Create a directed, weighted graph with three nodes and three edges.
def W = {
(1, 2, 1.0);
(2, 1, -1.0);
(2, 3, 1.0)
}
def G = create_graph[{(:weight, W)}, {(:is_weighted) ; (:is_directed)}]
@inline def mylib = rel:graphlib[G]

// Compute the weighted indegree sequence of nodes in G.
def output = mylib:weighted_indegree_sequence
//output> (1, 1.0)
//        (2, 1.0)
//        (3, -1.0)

// Compute the highest weighted indegree of a node.
def output = mylib:weighted_indegree_sequence[1]
//output> 1.0``````

### weighted_outdegree_sequence

View source
``weighted_outdegree_sequence(i, d)``

Compute the weighted outdegree sequence of a weighted graph in decreasing order.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`i``Int`An index.
`d``Int`A weighted outdegree in `G`.

Explanation

The weighted outdegree sequence of a graph is the list of the weighted outdegrees of all the nodes in a graph arranged from highest to lowest. `weighted_outdegree_sequence` returns index and weighted outdegree pairs, where index is the position of the corresponding weighted outdegree in the weighted outdegree sequence. As an example: `(1, 15.3)` means that outdegree value `15.3` is the highest weighted outdegree in this outdegree sequence.

Examples

``````// Create a directed, weighted graph with three nodes and three edges.
def W = {
(1, 2, 1.0);
(2, 1, -1.0);
(2, 3, 1.0)
}
def G = create_graph[{(:weight, W)}, {(:is_weighted) ; (:is_directed)}]
@inline def mylib = rel:graphlib[G]

// Compute the weighted outdegree sequence of nodes in G.
def output = mylib:weighted_outdegree_sequence
//output> (1, 1.0)
//        (2, 1.0)
//        (3, 0.0)

// Compute the highest weighted outdegree in G.
def output = mylib:weighted_outdegree_sequence[1]
//output> 1.0``````

### min_weighted_degree

View source
``min_weighted_degree(d)``

Compute the minimum weighted degree of weighted graph.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`d``Int`The minimum weighted degree of `G`.

Examples

``````def W = {
(1, 2, 1.0);
(1, 3, -1.0);
(2, 3, 1.0)
}
def G = create_graph[{(:weight, W)}, {(:is_weighted) ; (:is_directed)}]
@inline def mylib = rel:graphlib[G]

// Compute the minimum weighted degree of the graph.
def output = mylib:min_weighted_degree

// Check if 0.0 is the minimum weighted degree of the graph.
def output = my_graphlib:min_weighted_degree(0.0)
//output> ()  // true``````

### max_weighted_degree

View source
``````max_weighted_degree
max_weighted_degree(d)``````

Compute the maximum weighted degree of a weighted graph.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`d``Int`The maximum weighted degree of `G`.

Examples

``````def W = {
(1, 2, 1.0);
(1, 3, -1.0);
(2, 3, 2.0)
}
def G = create_graph[{(:weight, W)}, {(:is_weighted) ; (:is_directed)}]
@inline def mylib = rel:graphlib[G]

// Compute the maximum weighted degree of the graph.
def output = mylib:max_weighted_degree
//output> 3.0

// Check if 2.0 is the maximum weighted degree of the graph.
def output = my_graphlib:max_weighted_degree(3.0)
//output> ()  // true``````

### average_weighted_degree

View source
``average_weighted_degree(d)``

Compute the average weighted degree of a weighted graph.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`d``Float`The average weighted degree of `G`.

Examples

``````def W = {
(1, 2, 1.0);
(1, 3, -1.0);
(2, 3, 2.0)
}
def G = create_graph[{(:weight, W)}, {(:is_weighted) ; (:is_directed)}]
@inline def mylib = rel:graphlib[G]

// Compute the average weighted degree of the graph.
def output = mylib:average_weighted_degree
//output> 0.5

// Check that 0.5 is the average weighted degree of the graph.
def output = my_graphlib:average_weighted_degree(0.5)
//output> ()  // true``````

### min_weighted_indegree

View source
``min_weighted_indegree(d)``

Compute the minimum weighted indegree of a weighted graph.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`d``Int`The minimum weighted indegree of `G`.

Examples

``````def W = {
(1, 2, 1.0);
(1, 3, -1.0);
(2, 3, 1.0)
}
def G = create_graph[{(:weight, W)}, {(:is_weighted) ; (:is_directed)}]
@inline def mylib = rel:graphlib[G]

// Compute the minimum weighted indegree of the graph.
def output = mylib:min_weighted_indegree
//output> 0.0

// Check that 0.0 is the minimum weighted indegree of the graph.
def output = my_graphlib:min_weighted_indegree(0.0)
//output> ()  // true``````

### max_weighted_indegree

View source
`` max_weighted_indegree(d)``

Compute the maximum weighted indegree of a weighted graph.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`d``Int`The maximun weighted indegree of `G`.

Examples

`````` def W = {
(1, 2, 1.0);
(1, 3, -1.0);
(2, 3, 1.0)
}
def G = create_graph[{(:weight, W)}, {(:is_weighted) ; (:is_directed)}]
@inline def mylib = rel:graphlib[G]

// Compute the maximum weighted indegree of the graph.
def output = mylib:max_weighted_indegree
//output> 1.0

// Check that 1.0 is the maximum weighted indegree of the graph.
def output = my_graphlib:max_weighted_indegree(1.0)
//output> ()  // true``````

### average_weighted_indegree

View source
``average_weighted_indegree(d)``

Compute the average weighted indegree of a weighted graph.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`d``Float`The average weighted indegree of `G`.

Examples

``````def W = {
(1, 2, 1.0);
(1, 3, -1.0);
(2, 3, 1.0)
}
def G = create_graph[{(:weight, W)}, {(:is_weighted) ; (:is_directed)}]
@inline def mylib = rel:graphlib[G]

// Compute the average weighted indegree of the graph.
def output = mylib:average_weighted_indegree
//output> 0.5

// Check that 0.5 is the average weighted indegree of the graph.
def output = my_graphlib:average_weighted_indegree(0.5)
//output> ()  // true``````

### min_weighted_outdegree

View source
``min_weighted_outdegree(d)``

Compute the minimum weighted outdegree of a weighted graph.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`d``Int`The minimum weighted outdegree of `G`.

Examples

``````def W = {
(1, 2, 1.0);
(1, 3, -1.0);
(2, 3, 1.0)
}
def G = create_graph[{(:weight, W)}, {(:is_weighted) ; (:is_directed)}]
@inline def mylib = rel:graphlib[G]

// Compute the minimum weighted outdegree of the graph.
def output = mylib:min_weighted_outdegree
//output> 0.0

// Check that 0.0 is the minimum weighted outdegree of the graph.
def output = my_graphlib:min_weighted_outdegree(0.0)
//output> ()  // true``````

### max_weighted_outdegree

View source
``max_weighted_outdegree(d)``

Compute the maximum weighted outdegree of a weighted graph.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`d``Int`The maximum outdegree of `G`.

Examples

``````def W = {
(1, 2, 1.0);
(1, 3, -1.0);
(2, 3, 1.0)
}
def G = create_graph[{(:weight, W)}, {(:is_weighted) ; (:is_directed)}]
@inline def mylib = rel:graphlib[G]

// Compute the maximum weighted outdegree of the graph.
def output = mylib:max_weighted_outdegree
//output> 1.0

// Check that 1.0 is the maximum weighted outdegree of the graph.
def output = my_graphlib:max_weighted_outdegree(3.5)
//output> ()  // true``````

### average_weighted_outdegree

View source
``average_weight_outdegree(d)``

Compute the average weighted outdegree of a weighted graph.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`d``Float`The average weighted outdegree of `G`.

Examples

``````def W = {
(1, 2, 1.0);
(1, 3, -1.0);
(2, 3, 1.0)
}
def G = create_graph[{(:weight, W)}, {(:is_weighted) ; (:is_directed)}]
@inline def mylib = rel:graphlib[G]

// Compute the average weighted outdegree of the graph.
def output = mylib:average_weighted_outdegree
//output> 0.5

// Check that 0.5 is the average weighted outdegree of the graph.
def output = my_graphlib:average_weighted_outdegree(0.5)
//output> ()  // true``````

### weighted_degree_statistics

View source
``weighted_degree_statistics(name, p)``

Compute the weighted degree statistics of a weighted graph.

Supported Graph Types

Graph TypeSupported
UndirectedYes
DirectedYes
WeightedYes
UnweightedNo

Parameters

ParameterTypeDescription
`name``RelName`A weighted degree statistics name.
`p``Float`A weighted degree statistic of `G`.

Explanation

`weighted_degree_statistics` can be used to compute several weighted degree statistics of `G`, covering the average, minimum, and maximum of the weighted degrees, indegrees, and outdegrees.