Python Module for Directed Hypergraphs
Project description
dhgraph: Python Modlue for Directed Hypergraphs
Introduction
A directed hypergraph is a generalization of digraph. It consists of a set of vertices V and a set of hyperarcs H. A hyperarc is a pair of a nonempty subset of V (called head) and a vertex of V (called tail).
Installation
$ pip install dhgraph
Usage
Let us import dhgraph module, create an empty directed hypergraph object, and add hyperarcs as follows.
from dhgraph import DirectedHypergraph
g = DirectedHypergraph()
# 1 ---> 2
# | |
# v v
# 4----> 3
h1 = g.add_hyperarc((1,), 2)
h2 = g.add_hyperarc((1,), 4)
h3 = g.add_hyperarc((4, 2), 3)
H = {h1, h2, h3} # Set of hyperarc identifiers, used later.
# NOTE: The order of vertices in head is not important.
assert h3 == g.add_hyperarc((2, 4), 3)
# NOTE: The output of get_head() is sorted.
assert g.get_head(h3) == (2,4)
assert g.get_tail(h3) == 3
As above, add_hyperarc() has a tuple of vertex identifiers, head, as its 1st argument and a vertex identifier, tail, as its 2nd argument, and returns the identifier of a hyperarc having the head and the tail.
The vertices and the hyperarcs added so far can be obtained by get_vertices() and get_hyperarcs(), which respecitvely return a tuple of vertex identifiers and a tuple of hyperarc identifiers, as follows.
assert set(g.get_vertices()) == {1, 2, 3, 4}
assert set(g.get_hyperarcs()) == H
Hyperarcs that are incident to a vertex can be obtained by get_hyperarcs_from() and get_hyperarcs_to(), which respectively return a tuple of hyperarcs emanating from a vertex and a tuple of hyperarcs pointing to a vertex, as follows.
assert set(g.get_hyperarcs_from(1)) == {h1, h2}
assert set(g.get_hyperarcs_to(3)) == {h3}
# exceptinal cases
assert set(g.get_hyperarcs_from(3)) == set()
assert set(g.get_hyperarcs_to(1)) == set()
Vertices and hyperarcs can be assigned labels, if necessary, when they are added.
gg = DirectedHypergraph()
gg.add_vertex(1, label="A")
gg.add_vertex(2, label="B")
gg.add_vertex(3, label="C")
gg.add_vertex(4, label="D")
h1 = gg.add_hyperarc((1,), 2, label="A->B")
h2 = gg.add_hyperarc((1,), 4, label="A->D")
h3 = gg.add_hyperarc((4, 2), 3, label="B,D->C")
assert gg.get_vertex_label(4) == "D"
assert gg.get_hyperarc_label(h3) == "B,D->C"
If you prefer to use vertex labels, call add_vertex() for all vertices to which labels are to be assigned and then call add_hyperarc(). Otherwise, add_hyperarc() will add vertices appearing in head or tail so that they have vertex identifiers as their labels.
A directed hypergraph can be rendered as follows.
gg.render(filename="sample", format="png")
As a result, sample.png will be generated. The arugments of render() are the same as those of render() of Graphviz. See User Guide of Graphviz .
Bugs/Requests/Discussions
Please report bugs and requests from GitHub Issues , and ask questions from GitHub Discussions .
License
Please see LICENSE .
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file dhgraph-1.0.0.tar.gz
.
File metadata
- Download URL: dhgraph-1.0.0.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0f8f74ec92b0526f98cba720a5a50cd2cb146cd6376e6858925d5806c26a577a |
|
MD5 | 6abd91f87e7f3ec74026cfdda7c02454 |
|
BLAKE2b-256 | add37a85fcee37d7f10a4bec6d233d985430c079ae06a30d30c49553c489e297 |
File details
Details for the file dhgraph-1.0.0-py3-none-any.whl
.
File metadata
- Download URL: dhgraph-1.0.0-py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b1bc8cf74745a48702841b86beb9e6715ced74d5e1715c91ffad2e5cff4564c9 |
|
MD5 | e6ab51221ade726a6d47f15f957b83e6 |
|
BLAKE2b-256 | 3aa602bc30698da268f96ab6a46138caec7553014f8397a1730f4d9b520b9875 |