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

Safe HaskellNone
LanguageHaskell2010

IGraph

Synopsis

Documentation

class MGraph d => Graph d where Source #

Minimal complete definition

isDirected, isD

Methods

isDirected :: LGraph d v e -> Bool Source #

Graph is directed or not.

isD :: d -> Bool Source #

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

Return the number of nodes in a graph.

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

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

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

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

Return the number of edges in a graph.

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

Return all edges.

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

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

Whether a edge exists in the graph.

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

Return the label of given node.

getNodes :: (Hashable v, Eq v) => LGraph d v e -> v -> [Node] Source #

Return all nodes that are associated with given label.

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

Return the label of given edge.

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

Find the edge by edge ID.

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

Find the edge label by edge ID.

Instances
Graph D Source # 
Instance details

Methods

isDirected :: LGraph D v e -> Bool Source #

isD :: D -> Bool Source #

nNodes :: LGraph D v e -> Int Source #

nodes :: LGraph D v e -> [Node] Source #

labNodes :: Serialize v => LGraph D v e -> [LNode v] Source #

nEdges :: LGraph D v e -> Int Source #

edges :: LGraph D v e -> [Edge] Source #

labEdges :: Serialize e => LGraph D v e -> [LEdge e] Source #

hasEdge :: LGraph D v e -> Edge -> Bool Source #

nodeLab :: Serialize v => LGraph D v e -> Node -> v Source #

getNodes :: (Hashable v, Eq v) => LGraph D v e -> v -> [Node] Source #

edgeLab :: Serialize e => LGraph D v e -> Edge -> e Source #

getEdgeByEid :: LGraph D v e -> Int -> Edge Source #

getEdgeLabByEid :: Serialize e => LGraph D v e -> Int -> e Source #

Graph U Source # 
Instance details

Methods

isDirected :: LGraph U v e -> Bool Source #

isD :: U -> Bool Source #

nNodes :: LGraph U v e -> Int Source #

nodes :: LGraph U v e -> [Node] Source #

labNodes :: Serialize v => LGraph U v e -> [LNode v] Source #

nEdges :: LGraph U v e -> Int Source #

edges :: LGraph U v e -> [Edge] Source #

labEdges :: Serialize e => LGraph U v e -> [LEdge e] Source #

hasEdge :: LGraph U v e -> Edge -> Bool Source #

nodeLab :: Serialize v => LGraph U v e -> Node -> v Source #

getNodes :: (Hashable v, Eq v) => LGraph U v e -> v -> [Node] Source #

edgeLab :: Serialize e => LGraph U v e -> Edge -> e Source #

getEdgeByEid :: LGraph U v e -> Int -> Edge Source #

getEdgeLabByEid :: Serialize e => LGraph U v e -> Int -> e Source #

data LGraph d v e Source #

Graph with labeled nodes and edges.

Constructors

LGraph 
Instances
(Graph d, Serialize v, Serialize e, Hashable v, Eq v) => Serialize (LGraph d v e) Source # 
Instance details

Methods

put :: Putter (LGraph d v e) #

get :: Get (LGraph d v e) #

data U Source #

Undirected graph.

Instances
MGraph U Source # 
Instance details

Methods

new :: PrimMonad m => Int -> m (MLGraph (PrimState m) U v e) Source #

addNodes :: PrimMonad m => Int -> MLGraph (PrimState m) U v e -> m () Source #

addLNodes :: (Serialize v, PrimMonad m) => [v] -> MLGraph (PrimState m) U v e -> m () Source #

delNodes :: PrimMonad m => [Int] -> MLGraph (PrimState m) U v e -> m () Source #

addEdges :: PrimMonad m => [(Int, Int)] -> MLGraph (PrimState m) U v e -> m () Source #

addLEdges :: (PrimMonad m, Serialize e) => [LEdge e] -> MLGraph (PrimState m) U v e -> m () Source #

delEdges :: PrimMonad m => [(Int, Int)] -> MLGraph (PrimState m) U v e -> m () Source #

Graph U Source # 
Instance details

Methods

isDirected :: LGraph U v e -> Bool Source #

isD :: U -> Bool Source #

nNodes :: LGraph U v e -> Int Source #

nodes :: LGraph U v e -> [Node] Source #

labNodes :: Serialize v => LGraph U v e -> [LNode v] Source #

nEdges :: LGraph U v e -> Int Source #

edges :: LGraph U v e -> [Edge] Source #

labEdges :: Serialize e => LGraph U v e -> [LEdge e] Source #

hasEdge :: LGraph U v e -> Edge -> Bool Source #

nodeLab :: Serialize v => LGraph U v e -> Node -> v Source #

getNodes :: (Hashable v, Eq v) => LGraph U v e -> v -> [Node] Source #

edgeLab :: Serialize e => LGraph U v e -> Edge -> e Source #

getEdgeByEid :: LGraph U v e -> Int -> Edge Source #

getEdgeLabByEid :: Serialize e => LGraph U v e -> Int -> e Source #

data D Source #

Directed graph.

Instances
MGraph D Source # 
Instance details

Methods

new :: PrimMonad m => Int -> m (MLGraph (PrimState m) D v e) Source #

addNodes :: PrimMonad m => Int -> MLGraph (PrimState m) D v e -> m () Source #

addLNodes :: (Serialize v, PrimMonad m) => [v] -> MLGraph (PrimState m) D v e -> m () Source #

delNodes :: PrimMonad m => [Int] -> MLGraph (PrimState m) D v e -> m () Source #

addEdges :: PrimMonad m => [(Int, Int)] -> MLGraph (PrimState m) D v e -> m () Source #

addLEdges :: (PrimMonad m, Serialize e) => [LEdge e] -> MLGraph (PrimState m) D v e -> m () Source #

delEdges :: PrimMonad m => [(Int, Int)] -> MLGraph (PrimState m) D v e -> m () Source #

Graph D Source # 
Instance details

Methods

isDirected :: LGraph D v e -> Bool Source #

isD :: D -> Bool Source #

nNodes :: LGraph D v e -> Int Source #

nodes :: LGraph D v e -> [Node] Source #

labNodes :: Serialize v => LGraph D v e -> [LNode v] Source #

nEdges :: LGraph D v e -> Int Source #

edges :: LGraph D v e -> [Edge] Source #

labEdges :: Serialize e => LGraph D v e -> [LEdge e] Source #

hasEdge :: LGraph D v e -> Edge -> Bool Source #

nodeLab :: Serialize v => LGraph D v e -> Node -> v Source #

getNodes :: (Hashable v, Eq v) => LGraph D v e -> v -> [Node] Source #

edgeLab :: Serialize e => LGraph D v e -> Edge -> e Source #

getEdgeByEid :: LGraph D v e -> Int -> Edge Source #

getEdgeLabByEid :: Serialize e => LGraph D v e -> Int -> e Source #

decodeC :: (PrimMonad m, MonadThrow m, Graph d, Serialize v, Serialize e, Hashable v, Eq v) => ConduitT ByteString o m (LGraph d v e) Source #

Decode a graph from a stream of inputs. This may be more memory efficient than standard decode function.

empty :: (Graph d, Hashable v, Serialize v, Eq v, Serialize e) => LGraph d v e Source #

Create a empty graph.

mkGraph Source #

Arguments

:: (Graph d, Hashable v, Serialize v, Eq v, Serialize e) 
=> [v]

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

-> [LEdge e]

Labeled edges.

-> LGraph d v e 

Create a graph.

fromLabeledEdges :: (Graph d, Hashable v, Serialize v, Eq v, Serialize e) => [((v, v), e)] -> LGraph d v e Source #

Create a graph from labeled edges.

fromLabeledEdges' Source #

Arguments

:: (PrimMonad m, Graph d, Hashable v, Serialize v, Eq v, Serialize e) 
=> a

Input, usually a file

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

deserialize the input into a stream of edges

-> m (LGraph d v e) 

Create a graph from a stream of labeled edges.

unsafeFreeze :: (Hashable v, Eq v, Serialize v, PrimMonad m) => MLGraph (PrimState m) d v e -> m (LGraph d v e) Source #

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

freeze :: (Hashable v, Eq v, Serialize v, PrimMonad m) => MLGraph (PrimState m) d v e -> m (LGraph d v e) Source #

Convert a mutable graph to immutable graph.

unsafeThaw :: PrimMonad m => LGraph d v e -> m (MLGraph (PrimState m) d v e) Source #

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

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

Create a mutable graph.

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

Find all neighbors of the given node.

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

Find all nodes that link to to the given node.

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

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

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

Apply a function to change nodes' labels.

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

Apply a function to change edges' labels.

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

Keep nodes that satisfy the constraint.

efilter :: (Hashable v, Eq v, Serialize v, Serialize e, Graph d) => (LEdge e -> Bool) -> LGraph d v e -> LGraph d v e Source #

Keep edges that satisfy the constraint.