haskell-igraph-0.7.0: Haskell interface of the igraph library.

Safe HaskellNone
LanguageHaskell2010

IGraph

Contents

Synopsis

Documentation

data Graph (d :: EdgeType) v e Source #

Graph with labeled nodes and edges.

Constructors

Graph 

Fields

Instances
(SingI d, Serialize v, Serialize e, Ord v) => Serialize (Graph d v e) Source # 
Instance details

Methods

put :: Putter (Graph d v e) #

get :: Get (Graph d v e) #

data EdgeType Source #

Constructors

D 
U 
Instances
Eq EdgeType Source # 
Instance details
Generic EdgeType Source # 
Instance details

Associated Types

type Rep EdgeType :: * -> * #

Methods

from :: EdgeType -> Rep EdgeType x #

to :: Rep EdgeType x -> EdgeType #

Serialize EdgeType Source # 
Instance details
SEq EdgeType Source # 
Instance details

Methods

(%==) :: Sing a -> Sing b -> Sing (a == b) #

(%/=) :: Sing a -> Sing b -> Sing (a /= b) #

PEq EdgeType Source # 
Instance details

Associated Types

type x == y :: Bool #

type x /= y :: Bool #

SDecide EdgeType Source # 
Instance details

Methods

(%~) :: Sing a -> Sing b -> Decision (a :~: b) #

SingKind EdgeType Source # 
Instance details

Associated Types

type Demote EdgeType = (r :: *) #

SingI D Source # 
Instance details

Methods

sing :: Sing D #

SingI U Source # 
Instance details

Methods

sing :: Sing U #

type Rep EdgeType Source # 
Instance details
type Rep EdgeType = D1 (MetaData "EdgeType" "IGraph.Types" "haskell-igraph-0.7.0-28bZ7LxlsbjHs79mtNetQJ" False) (C1 (MetaCons "D" PrefixI False) (U1 :: * -> *) :+: C1 (MetaCons "U" PrefixI False) (U1 :: * -> *))
data Sing (z :: EdgeType) Source # 
Instance details
data Sing (z :: EdgeType) where
type Demote EdgeType Source # 
Instance details
type (x :: EdgeType) /= (y :: EdgeType) Source # 
Instance details
type (x :: EdgeType) /= (y :: EdgeType) = Not (x == y)
type (a :: EdgeType) == (b :: EdgeType) Source # 
Instance details

type Node = Int Source #

type LNode a = (Node, a) Source #

type Edge = (Node, Node) Source #

type LEdge a = (Edge, a) Source #

isDirected :: forall d v e. SingI d => Graph d v e -> Bool Source #

Is the graph directed or not.

nNodes :: Graph d v e -> Int Source #

Return the number of nodes in a graph.

nodeLab :: Serialize v => Graph d v e -> Node -> v Source #

Return the label of given node.

nodes :: Graph d v e -> [Node] Source #

Return all nodes. nodes gr == [0 .. nNodes gr - 1].

labNodes :: Serialize v => Graph d v e -> [LNode v] Source #

nEdges :: Graph d v e -> Int Source #

Return the number of edges in a graph.

edgeLab :: Serialize e => Graph d v e -> Edge -> e Source #

Return the label of given edge.

edges :: Graph d v e -> [Edge] Source #

Return all edges.

labEdges :: Serialize e => Graph d v e -> [LEdge e] Source #

addNodes Source #

Arguments

:: (Ord v, Serialize v) 
=> [v]

vertices' labels

-> Graph d v e 
-> Graph d v e 

Add nodes with labels to the graph.

delNodes :: (Ord v, Serialize v) => [Node] -> Graph d v e -> Graph d v e Source #

Delete nodes from the graph.

addEdges :: Serialize e => [LEdge e] -> Graph d v e -> Graph d v e Source #

Add edges with labels to the graph.

delEdges :: SingI d => [Edge] -> Graph d v e -> Graph d v e Source #

Delete edges from the graph.

hasEdge :: Edge -> Graph d v e -> Bool Source #

Whether a edge exists in the graph.

getNodes :: Ord v => Graph d v e -> v -> [Node] Source #

Return all nodes that are associated with given label.

getEdgeByEid :: Graph d v e -> Int -> Edge Source #

Find the edge by edge ID.

getEdgeLabByEid :: Serialize e => Graph d v e -> Int -> e Source #

Find the edge label by edge ID.

empty :: (SingI d, Serialize v, Ord v, Serialize e) => Graph d v e Source #

Create a empty graph.

mkGraph Source #

Arguments

:: (SingI d, Serialize v, Ord v, Serialize e) 
=> [v]

Nodes. Each will be assigned a ID from 0 to N.

-> [LEdge e]

Labeled edges.

-> Graph d v e 

Create a graph.

fromLabeledEdges :: (SingI d, Serialize v, Ord v, Serialize e) => [((v, v), e)] -> Graph d v e Source #

Create a graph from labeled edges.

fromLabeledEdges' Source #

Arguments

:: (MonadUnliftIO m, SingI d, Serialize v, Ord v, Serialize e) 
=> a

Input, usually a file

-> (a -> ConduitT () ((v, v), e) m ())

deserialize the input into a stream of edges

-> m (Graph d v e) 

Create a graph from a stream of labeled edges.

unsafeFreeze :: PrimMonad m => MGraph (PrimState m) d v e -> m (Graph d v e) Source #

Convert a mutable graph to immutable graph. The original graph may not be used afterwards.

freeze :: PrimMonad m => MGraph (PrimState m) d v e -> m (Graph d v e) Source #

Convert a mutable graph to immutable graph.

unsafeThaw :: PrimMonad m => Graph d v e -> m (MGraph (PrimState m) d v e) Source #

Create a mutable graph. The original graph may not be used afterwards.

thaw :: PrimMonad m => Graph d v e -> m (MGraph (PrimState m) d v e) Source #

Create a mutable graph.

neighbors :: Graph d v e -> Node -> [Node] Source #

Find all neighbors of the given node.

pre :: Graph D v e -> Node -> [Node] Source #

Find all nodes that link to to the given node.

suc :: Graph D v e -> Node -> [Node] Source #

Find all nodes that have a link from the given node.

nmap :: (Serialize v1, Serialize v2, Ord v2) => (LNode v1 -> v2) -> Graph d v1 e -> Graph d v2 e Source #

Apply a function to change nodes' labels.

emap :: (Serialize e1, Serialize e2, Ord v, Serialize v) => (LEdge e1 -> e2) -> Graph d v e1 -> Graph d v e2 Source #

Apply a function to change edges' labels.

nfilter :: (Ord v, Serialize v) => (LNode v -> Bool) -> Graph d v e -> Graph d v e Source #

Keep nodes that satisfy the constraint.

efilter :: (SingI d, Ord v, Serialize v, Serialize e) => (LEdge e -> Bool) -> Graph d v e -> Graph d v e Source #

Keep edges that satisfy the constraint.

Non-simple graphs: multiple and loop edges

isSimple :: Graph d v e -> Bool Source #

Decides whether the input graph is a simple graph. A graph is a simple graph if it does not contain loop edges and multiple edges.

hasMultiple :: Graph d v e -> Bool Source #

Check whether the graph has at least one multiple edge. An edge is a multiple edge if there is another edge with the same head and tail vertices in the graph.