/multihypergraph

A simple python package for graph theory that supports multi-edges, hyper-edges, looped-edges and every other combination of these.

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

multihypergraph

A simple python package for graph theory that supports multi-edges, hyper-edges, looped-edges and every other combination of these. This package is an exercise in defining statically-typed, functional implementations of graphs that have the following features:

  • Each vertex of the graph is a characted. For example 'ab,bc,ac'" is a triangle graph with vertices {'a', 'b', 'c'}.
  • Multi-edges are allowed. 'ab,ab' is a valid graph.
  • Hyper-edges are allowed. 'abc' is a valid graph.
  • Self-loops are allowed. 'aa' is a valid graph.
  • Collapsed edges are allowed. 'aab' is a valid graph

Check out the wikipedia entries for Hypergraph and Multigraph. Think of this package as happy marriage between the two.

Installation

pip install multihypergraph

Features

  • Almost all the code is functional.
  • Mutability of data types is never used.
  • All types are explicitly mentioned using static-typing (and checked courtesy mypy).
  • The above mentioned feature makes it easier to reason mathematically about the code.
  • The emphasis is on mathematical understanding and soundness rather than algorithmic efficiency.
  • The top-level scripts are divided into objects/ and morphisms/ to emphasize the category-theoretic structure of multihypergraphs.
  • Functional programming allows us to write easy-to-decipher tests using pytest.