UNPKG

3.11 kBMarkdownView Raw
1# iper
2
3> Hypergraphs for breakfast!
4
5[Installation](#installation) |
6[API](#api) |
7[Examples](#examples) |
8[License](#license)
9
10[![Node engine](https://img.shields.io/node/v/iper.svg)](https://nodejs.org/en/) [![NPM version](https://badge.fury.io/js/iper.svg)](http://badge.fury.io/js/iper) [![Build Status](https://travis-ci.org/fibo/iper.svg?branch=master)](https://travis-ci.org/fibo/iper?branch=master) [![Dependency Status](https://gemnasium.com/fibo/iper.svg)](https://gemnasium.com/fibo/iper) [![Coverage Status](https://coveralls.io/repos/fibo/iper/badge.svg?branch=master)](https://coveralls.io/r/fibo/iper?branch=master) [![Test page](https://img.shields.io/badge/test-page-blue.svg)](http://g14n.info/iper/test)
11
12[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard)
13
14[![NPM](https://nodei.co/npm-dl/iper.png)](https://nodei.co/npm-dl/iper/)
15
16## Installation
17
18With [npm](https://npmjs.org/) do
19
20```bash
21npm install iper
22```
23
24## API
25
26### `new Graph([graph])`
27
28> Hypergraph constructor.
29
30```javascript
31const Graph = require('iper').Graph
32
33const graph = new Graph()
34```
35
36* **@param** `{Object}` [graph]
37* **@param** `{Object}` [graph.edges]
38* **@param** `{Object}` [graph.nodes]
39* **@param** `{Boolean}` [graph.multigraph] can contain duplicated edges
40* **@param** `{Boolean}` [graph.pseudograph] is a multigraph with loops allowed
41* **@param** `{Number}` [graph.uniform] all edges have the same cardinality (i.e. number of nodes)
42
43### `graph.addEdge(nodeIds)`
44
45> Add an hyperedge that connects given nodeIds.
46
47* **@param** `{Array}` nodeIds
48* **@returns** `{String}` id
49
50### `graph.addNode(data)`
51
52> Add a node, containing given data.
53
54```javascript
55var nodeId = graph.addNode({ label: 'foo' })
56```
57
58* **@param** `{*}` [data]
59* **@returns** `{String}` id of the node created
60
61### `graph.degreeOf(nodeId)`
62
63> Returns the degree of a node, that is the number of incident edges with loops counted twice.
64
65* **@param** `{String}` id
66* **@returns** `{void}`
67
68### `graph.delEdge(edgeId)`
69
70> Delete edge by given id.
71
72The node id will be removed from every edge connected.
73If some edge after this operation will result having only one or zero
74vertices left, it will be removed too.
75
76* **@param** `{String}` edgeId
77* **@returns** `{void}`
78
79### `graph.delNode(nodeId)`
80
81> Delete node by given id.
82
83* **@param** `{String}` nodeId
84* **@returns** `{void}`
85
86### `graph.generateId()`
87
88> Returns a random string to be used as id.
89
90* **@returns** `{String}`
91
92Override this method if you want to customize how ids are generated, for example
93
94```javascript
95const uniqueid = require('lodash.uniqueid')
96const Graph = require('iper').Graph
97
98class MyGraph extends Graph {
99 generateId () {
100 return uniqueid()
101 }
102}
103
104module.exports = MyGraph
105```
106
107### `graph.getRank()`
108
109> Returns the max cardinality of any of the edges in the hypergraph.
110
111* **@returns** `{Number}`
112
113## Examples
114
115### Classic graph
116
117```javascript
118const Graph = require('iper').Graph
119
120const classicGraph = new Graph({ uniform: 2 })
121```
122
123## License
124
125[MIT](http://www.g14n.info/mit-license)